$ () ในคำสั่งคืออะไร


18

อะไรคือสิ่งที่$()อยู่ในลินุกซ์เชลล์คำสั่ง?

ตัวอย่างเช่น:

chmod 777 $(pwd)

1
โปรดทราบว่าไม่มีสิ่งดังกล่าวเป็นคำสั่งของเชลล์บรรทัด มีแอปพลิเคชั่นเชลล์จำนวนมากสำหรับ Linux
Stéphane Chazelas

คำตอบ:


21

มันคล้ายกับ backticks มาก

มันเรียกว่าการทดแทนคำสั่ง (สเปค posix ) และมันเรียก subshell คำสั่งในวงเล็บปีกกา$()หรือ beween backticks (``) จะดำเนินการใน subshell แล้วเอาท์พุทจะถูกวางไว้ในคำสั่งเดิม

ซึ่งแตกต่างจาก backticks $(...)แบบฟอร์มสามารถซ้อน ดังนั้นคุณสามารถใช้การทดแทนคำสั่งภายในการทดแทนอื่น

มีความแตกต่าง aso ในการหลบหนีตัวละครภายในการทดแทน ฉันชอบ$(...)แบบฟอร์ม


4
backticks สามารถซ้อนกันได้เช่นกัน โปรดทราบว่าอักขระขึ้นบรรทัดใหม่ต่อท้ายจะถูกลบออกจากเอาต์พุตของคำสั่ง
Stéphane Chazelas

2
@ StéphaneChazelas backticks จะซ้อนกันได้อย่างไร คุณหมายถึงโดยการหลบหนีแบบ ecxessive?
โกลาหล

3
ใช่: ชอบecho `echo \`echo foo\`` bar
Stéphane Chazelas

1
การอ้างอิงอย่างเป็นทางการใด ๆ ที่บอกว่า backticks นั้นเลิกใช้แล้ว?
vinc17

1
พบคำตอบนี้: unix.stackexchange.com/questions/126927/…ดูเหมือนว่าพวกเขาจะไม่คัดค้าน เปลี่ยนคำตอบของฉันแล้วขอบคุณ
โกลาหล

5

ใน POSIX หรือ POSIX เหมือนเปลือกหอย ( ksh, bash, ash, zsh, yash... ) มันก็เหมือน``: ภายในคำสั่ง$()จะถูกดำเนินการและถูกแทนที่ด้วยการส่งออกมาตรฐาน การแบ่งคำและการสร้างชื่อไฟล์เสร็จสิ้นเว้นแต่$()จะอยู่ในเครื่องหมายคำพูดคู่ ดังนั้น

chmod 777 $(pwd)

ควรถูกแทนที่ด้วย:

chmod 777 "$(pwd)"

เพื่อหลีกเลี่ยงการแยกคำและการสร้างชื่อไฟล์บนเส้นทางไดเรกทอรีการทำงานปัจจุบัน

หรือดียิ่งขึ้น (ยกเว้นภายใต้เชลล์บางตัวเช่น zsh ในกรณีที่ไดเรกทอรีถูกเปลี่ยนชื่อ):

chmod 777 "$PWD"

เนื่องจาก$PWDเป็นตัวแปรพิเศษที่เก็บพา ธ ไปยังไดเร็กทอรีการทำงานปัจจุบันใน POSIX เชลล์

หรือดีกว่า:

chmod 777 .

เนื่องจาก.รายการในไดเรกทอรีปัจจุบันเป็นฮาร์ดลิงก์ไปยังไดเรกทอรีนั้นเอง


2

นี้$()จะใช้สำหรับการดำเนินการคำสั่งส่วนใหญ่อยู่ภายในคำสั่งอื่น ๆ

chmod 777 $(pwd)

pwdคำสั่งให้ไดเรกทอรีการทำงานปัจจุบัน ดังนั้นเมื่อสิ่งทั้งหมดถูกดำเนินการเอาต์พุตของ pwd จะแทนที่ตำแหน่งและทำหน้าที่เป็นอาร์กิวเมนต์chmodและผลลัพธ์คือไดเรกทอรีการทำงานปัจจุบันของคุณทั้งหมดได้รับอนุญาต777ซึ่งฉันเดาว่าไม่ควรใช้ในสภาพแวดล้อมการผลิต;)

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