อะไรคือสิ่งที่$()อยู่ในลินุกซ์เชลล์คำสั่ง?
ตัวอย่างเช่น:
chmod 777 $(pwd)
อะไรคือสิ่งที่$()อยู่ในลินุกซ์เชลล์คำสั่ง?
ตัวอย่างเช่น:
chmod 777 $(pwd)
คำตอบ:
มันคล้ายกับ backticks มาก
มันเรียกว่าการทดแทนคำสั่ง (สเปค posix ) และมันเรียก subshell คำสั่งในวงเล็บปีกกา$()หรือ beween backticks (``) จะดำเนินการใน subshell แล้วเอาท์พุทจะถูกวางไว้ในคำสั่งเดิม
ซึ่งแตกต่างจาก backticks $(...)แบบฟอร์มสามารถซ้อน ดังนั้นคุณสามารถใช้การทดแทนคำสั่งภายในการทดแทนอื่น
มีความแตกต่าง aso ในการหลบหนีตัวละครภายในการทดแทน ฉันชอบ$(...)แบบฟอร์ม
echo `echo \`echo foo\`` bar
ใน POSIX หรือ POSIX เหมือนเปลือกหอย ( ksh, bash, ash, zsh, yash... ) มันก็เหมือน``: ภายในคำสั่ง$()จะถูกดำเนินการและถูกแทนที่ด้วยการส่งออกมาตรฐาน การแบ่งคำและการสร้างชื่อไฟล์เสร็จสิ้นเว้นแต่$()จะอยู่ในเครื่องหมายคำพูดคู่ ดังนั้น
chmod 777 $(pwd)
ควรถูกแทนที่ด้วย:
chmod 777 "$(pwd)"
เพื่อหลีกเลี่ยงการแยกคำและการสร้างชื่อไฟล์บนเส้นทางไดเรกทอรีการทำงานปัจจุบัน
หรือดียิ่งขึ้น (ยกเว้นภายใต้เชลล์บางตัวเช่น zsh ในกรณีที่ไดเรกทอรีถูกเปลี่ยนชื่อ):
chmod 777 "$PWD"
เนื่องจาก$PWDเป็นตัวแปรพิเศษที่เก็บพา ธ ไปยังไดเร็กทอรีการทำงานปัจจุบันใน POSIX เชลล์
หรือดีกว่า:
chmod 777 .
เนื่องจาก.รายการในไดเรกทอรีปัจจุบันเป็นฮาร์ดลิงก์ไปยังไดเรกทอรีนั้นเอง
นี้$()จะใช้สำหรับการดำเนินการคำสั่งส่วนใหญ่อยู่ภายในคำสั่งอื่น ๆ
chmod 777 $(pwd)
pwdคำสั่งให้ไดเรกทอรีการทำงานปัจจุบัน ดังนั้นเมื่อสิ่งทั้งหมดถูกดำเนินการเอาต์พุตของ pwd จะแทนที่ตำแหน่งและทำหน้าที่เป็นอาร์กิวเมนต์chmodและผลลัพธ์คือไดเรกทอรีการทำงานปัจจุบันของคุณทั้งหมดได้รับอนุญาต777ซึ่งฉันเดาว่าไม่ควรใช้ในสภาพแวดล้อมการผลิต;)