ทำไม `$ {$ (pwd)}` ส่งออกไดเรกทอรีการทำงานปัจจุบันเป็น zsh?


3

ใน zsh ให้${$(pwd)}ส่งออกไดเรกทอรีปัจจุบัน อย่างไรก็ตามถ้าฉันวิ่งecho ${/path/to/somewhere}มันแค่แสดงบรรทัดว่างเปล่า ทำไมสิ่งนี้ถึงเกิดขึ้น ขอบคุณ!

คำตอบ:


1

ฉันคิดว่าคุณพูดprint ${$(pwd)}หรืออะไรแบบนั้นใช่มั้ย!

การขยาย ${$(pwd)}ไปยังไดเรกทอรีการทำงานปัจจุบันเป็นลักษณะการทำงานที่คาดไว้แม้ว่ามันจะดูแปลก ๆ ในแวบแรก อย่าปล่อยให้คุณโง่โดยคิดว่าการทดแทนคำสั่ง$(pwd)จะถูกประเมินก่อนผลลัพธ์จะถูกใช้เป็นชื่อตัวแปร ... ไม่มันถูกใช้เป็นค่าตัวแปร ตามที่man zshexpnอธิบายไว้:

${name} ค่าถ้ามีของชื่อพารามิเตอร์จะถูกแทนที่

( ... ) ถ้า${...}การแสดงออกประเภทพารามิเตอร์หรือ$(...)เปลี่ยนตัวประเภทคำสั่งที่ใช้ในสถานที่ของข้างต้นก็จะขยายตัวเป็นครั้งแรกและผลที่ได้จะใช้เป็นว่ามันเป็นค่าของname name(... ) แบบฟอร์มที่$(...)มักมีประโยชน์เมื่อใช้ร่วมกับค่าสถานะที่อธิบายไว้ถัดไป ดูตัวอย่างด้านล่าง

(... ) การตั้งค่าสถานะ f มีประโยชน์ในการแบ่งบรรทัดการแทนที่แบบสองบรรทัดต่อบรรทัด ตัวอย่างเช่น${(f)"$(<file)"}แทนที่เนื้อหาของไฟล์ที่ถูกแบ่งเพื่อให้แต่ละบรรทัดเป็นองค์ประกอบของอาร์เรย์ผลลัพธ์

ตัวอย่างที่สองของคุณ ฉันคิดว่านี่เป็นรูปแบบแทนที่ไวยากรณ์:

${name/pattern/repl} แทนที่การจับคู่รูปแบบที่ยาวที่สุดที่เป็นไปได้ในการขยายชื่อพารามิเตอร์โดยการแทนที่สตริง ( ... )

ดูตัวอย่างนี้ก่อน:

$ foo=hello
$ print ${foo/hello/good/bye}
good/bye

หากคุณไม่fooระบุzshให้ทำการค้นหาและแทนที่ในตัวแปร${}ซึ่งว่างเปล่า:

$ print ${}

$

- ดังนั้น${/something/foo/bar}จะส่งคืนสตริงว่างด้วย

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