อะไรคือสิ่งที่$()
อยู่ในลินุกซ์เชลล์คำสั่ง?
ตัวอย่างเช่น:
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
ซึ่งฉันเดาว่าไม่ควรใช้ในสภาพแวดล้อมการผลิต;)