การแทนที่สตริง: เหตุการณ์ทั้งหมด


13

คำถามง่ายๆ แต่ฉันไม่สามารถหาคำตอบได้ เอกสาร zsh ครอบงำฉัน :-(

function z ()
{
  echo ${1:s/the/THE}
}

$ z thethethe
THEthethe

...

ฉันจะให้ 'the' ทั้งหมดถูกแทนที่ด้วย 'THE' ได้อย่างไรไม่ใช่แค่สิ่งที่เกิดขึ้นครั้งแรก ด้วย zsh มันเป็นสิ่งที่ง่ายที่สุดที่ดูเหมือนจะหาได้ยากที่สุด

คำตอบ:


23

นี่คือการปรับปรุงการขยายตัวประวัติศาสตร์เพื่อเพิ่มปรับปรุงทันทีก่อนgs

echo ${1:gs/the/THE}

หรือใช้ไวยากรณ์การขยายพารามิเตอร์โดยที่เครื่องหมายทับสองหมายถึงการแทนที่แบบโกลบอล ในกรณีนี้ส่วนหลังs//เป็นรูปแบบไวด์การ์ดในขณะที่การทดแทนการขยายประวัติใช้สตริงตัวอักษร

echo ${1//the/THE}


3

ที่นั่นมันต้องเรียบง่าย:

echo ${1//the/THE}

... เครื่องหมายทับสองอันทำและคุณไม่สามารถหลอกด้วย ": s"

BTW ฉันขอขอบคุณเว็บไซต์ 'StackExchange' ที่มีอยู่ ในทุกพื้นที่ของสถานที่หนึ่งอาจถามคำถามสิ่งเหล่านี้เป็นสิ่งที่ดีที่สุด - ไม่เพียง แต่ได้รับคำตอบเกือบทุกครั้งเท่านั้น แต่คำตอบเหล่านั้นมีคุณภาพสูงสุดเสมอ


1

// ทำงานได้สมบูรณ์แบบหากคุณพยายามที่จะแทนที่คำเฉพาะไปยังตัวพิมพ์ใหญ่ทั้งหมดในขณะที่ไม่เหลือคำอื่นใด หากคุณพยายามแปลงทุกอย่างเป็นตัวพิมพ์ใหญ่คุณสามารถใช้ ": u" ในตัวแปร

SOME_ENV_VALUE='thethethe'
echo $SOME_ENV_VALUE:u // outputs: THETHETHE

คุณสามารถตรวจสอบว่าตัวดัดแปลงใดที่คุณมีอยู่ในคู่มือการขยายและการทดแทน zsh

man zshexpn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.