การทดแทนคำสั่งอนุญาตให้เอาต์พุตของคำสั่งถูกแทนที่ด้วยชื่อคำสั่งเอง การทดแทนคำสั่งจะเกิดขึ้นเมื่อคำสั่งถูกปิดล้อมดังนี้:
$(command)
หรือ (เวอร์ชันที่ยกมาหลัง):
`command`
เชลล์จะขยายการทดแทนคำสั่งโดยการดำเนินการคำสั่ง
ในสภาพแวดล้อม subshell (ดูที่Shell Execution Environment ) และแทนที่การแทนที่คำสั่ง (ข้อความของคำสั่งรวมถึงการปิด "$ ()" หรือ backquotes) ด้วยเอาต์พุตมาตรฐานของคำสั่ง ลำดับของ<newline>
อักขระหนึ่งตัวขึ้นไปเมื่อสิ้นสุดการแทนที่ <newline>
อักขระฝังตัวก่อนสิ้นเอาต์พุตจะไม่ถูกลบออก อย่างไรก็ตามอาจถูกใช้เป็นตัวคั่นฟิลด์และตัดออกในระหว่างการแยกฟิลด์ขึ้นอยู่กับค่าของ IFS และการอ้างอิงที่มีผล หากผลลัพธ์มีไบต์เป็นโมฆะพฤติกรรมจะไม่ได้รับการกำหนด
ภายในสไตล์ backquoted ของแทนคำสั่ง<backslash>
จะต้องรักษาความหมายที่แท้จริงของมันยกเว้นเมื่อตามด้วย: ' $
', ' `
'
<backslash>
หรือ การค้นหา backquote ที่ตรงกันจะต้องเป็นไปตาม backquote ที่ไม่มีการ Escape แรก ในระหว่างการค้นหานี้หากพบ backquote ที่ไม่ใช้ Escape ภายในข้อคิดเห็นเชลล์, here-document, การแทนที่คำสั่งแบบฝังของแบบฟอร์ม$ ( คำสั่ง ) หรือสตริงที่ยกมา, ผลลัพธ์ที่ไม่ได้กำหนดจะเกิดขึ้น สตริงที่มีเครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายคำพูดคู่ที่เริ่มต้น แต่ไม่สิ้นสุดภายใน`...`
ลำดับ "" จะสร้างผลลัพธ์ที่ไม่ได้กำหนด
ด้วย $ ( คำสั่งแบบฟอร์ม) ทุกตัวอักษรต่อไปนี้วงเล็บเปิดไปวงเล็บปิดการจับคู่ถือเป็น
คำสั่ง เชลล์สคริปต์ที่ถูกต้องใด ๆ สามารถใช้สำหรับคำสั่งยกเว้นสคริปต์ที่มีเพียงการเปลี่ยนเส้นทางซึ่งสร้างผลลัพธ์ที่ไม่ระบุ
ผลลัพธ์ของการทดแทนคำสั่งจะไม่ถูกประมวลผลสำหรับการขยายตัวหนอนเพิ่มเติมการขยายพารามิเตอร์การทดแทนคำสั่งหรือการขยายเลขคณิต หากการทดแทนคำสั่งเกิดขึ้นภายในเครื่องหมายคำพูดคู่การแยกฟิลด์และการขยายชื่อพา ธ จะไม่สามารถทำได้ในผลลัพธ์ของการทดแทน
การทดแทนคำสั่งสามารถซ้อนกันได้ ในการระบุการซ้อนภายในเวอร์ชัน backquote แอปพลิเคชันจะต้องนำหน้า backquotes ด้านในด้วย<backslash>
อักขระ ตัวอย่างเช่น:
\`command\`
ไวยากรณ์ของภาษาคำสั่งเชลล์มีความกำกวมสำหรับการขยายที่ขึ้นต้นด้วย "$((
"ซึ่งสามารถแนะนำการขยายตัวทางคณิตศาสตร์หรือการทดแทนคำสั่งที่เริ่มต้นด้วยการ subshell การขยายตัวทางคณิตศาสตร์มีความสำคัญกว่านั่นคือเปลือกจะต้องพิจารณาก่อนว่ามันสามารถแยกวิเคราะห์การขยายตัวเป็นการขยายตัวทางคณิตศาสตร์และจะแยกวิเคราะห์การขยายตัวเป็นคำสั่งเท่านั้น การทดแทนหากพิจารณาว่าไม่สามารถแยกวิเคราะห์การขยายตัวเป็นส่วนขยายทางคณิตศาสตร์เชลล์ไม่จำเป็นต้องประเมินการขยายที่ซ้อนกันเมื่อดำเนินการกำหนดนี้หากพบการสิ้นสุดของอินพุตโดยที่ไม่ได้ระบุว่าไม่สามารถวิเคราะห์การขยายเป็นการขยายเลขคณิต เชลล์จะถือว่าการขยายตัวเป็นส่วนขยายทางคณิตศาสตร์ที่ไม่สมบูรณ์และรายงานข้อผิดพลาดทางไวยากรณ์แอปพลิเคชันที่สอดคล้องกันจะต้องแน่ใจว่ามันแยก " $(
" และ "(
'เป็นสองโทเค็น (นั่นคือแยกพวกเขาด้วยช่องว่างสีขาว) ในการทดแทนคำสั่งที่เริ่มต้นด้วย subshell ตัวอย่างเช่นการทดแทนคำสั่งที่มี subshell เดียวสามารถเขียนเป็น:
$( (command) )
$()
เป็น POSIX และสนับสนุนโดยบอร์นเชลล์สมัยใหม่ทั้งหมดเช่น ksh, bash, ash, dash, zsh, busybox คุณตั้งชื่อมัน (อันที่ไม่ทันสมัยก็คือโซลาริ/bin/sh
ส แต่สำหรับโซลาริสคุณต้องแน่ใจว่าใช้โซลาริส/usr/xpg4/bin/sh
แทน)