การทดแทนคำสั่ง
อีกตัวเลือกหนึ่งคือการใช้คำสั่งเปลี่ยนตัว การห่อคำสั่ง$()
จะเรียกใช้คำสั่งและแทนที่คำสั่งด้วยเอาต์พุต
cat $(find ./inhere -size 1033c 2> /dev/null)
จะกลายเป็น
cat ./inhere/file1 .inhere/file3
นี่เทียบเท่าหรือมากกว่ากับการใช้คำสั่งการห่อแบบเก่าด้วยเครื่องหมายขีดหลัง:
cat `find ./inhere -size 1033c 2> /dev/null`
รายละเอียดเพิ่มเติมจากเอกสารที่ลิงก์ด้านบน
Bash ทำการขยายตัวโดยการดำเนินการคำสั่งในสภาพแวดล้อม subshell และแทนที่การทดแทนคำสั่งด้วยเอาต์พุตมาตรฐานของคำสั่งด้วยบรรทัดใหม่ต่อท้ายใด ๆ ที่ถูกลบ บรรทัดใหม่ที่ฝังจะไม่ถูกลบ แต่อาจถูกลบระหว่างการแยกคำ ทดแทนคำสั่ง$(cat file)
จะถูกแทนที่ด้วยเทียบเท่า $(< file)
แต่ได้เร็วขึ้น
เมื่อรูปแบบ backquote แบบเก่าของการทดแทนที่ใช้ทับขวายังคงมีความหมายที่แท้จริงของมันยกเว้นเมื่อตามด้วย$
, หรือ`
\
backquote แรกที่ไม่ได้นำหน้าด้วย backslash จะยุติการทดแทนคำสั่ง เมื่อใช้$(command)
แบบฟอร์มอักขระทั้งหมดระหว่างวงเล็บจะประกอบขึ้นเป็นคำสั่ง ไม่มีใครได้รับการดูแลเป็นพิเศษ
การแทนที่คำสั่งอาจซ้อนอยู่ ในการซ้อนเมื่อใช้รูปแบบ backquote ให้หลีกเลี่ยง backquotes ภายในด้วยเครื่องหมายแบ็กสแลช
หากการแทนที่ปรากฏภายในเครื่องหมายคำพูดคู่การแยกคำและการขยายชื่อไฟล์จะไม่ถูกดำเนินการกับผลลัพธ์
ดูคำตอบอื่น ๆ นี้สำหรับตัวอย่างการใช้งานที่ดี