มีความหมายที่แตกต่างกันสองอย่างของ "คัดค้าน"
เลิกใช้: (ส่วนใหญ่ของคุณสมบัติซอฟต์แวร์) ใช้งานได้ แต่ถือว่าล้าสมัยและหลีกเลี่ยงที่ดีที่สุดโดยทั่วไปเนื่องจากถูกแทนที่
- พจนานุกรมฟอร์ดอเมริกันใหม่
โดยคำจำกัดความ backticks นี้ถูกคัดค้าน
สถานะที่เลิกใช้แล้วอาจระบุว่าสถานที่นั้นจะถูกลบในอนาคต
- วิกิพีเดีย
โดยคำจำกัดความ backticks นี้จะไม่คัดค้าน
ยังคงได้รับการสนับสนุน:
การอ้างถึงOpen Group Specification ในภาษาคำสั่งเชลล์โดยเฉพาะส่วน "2.6.3 การทดแทนคำสั่ง" จะเห็นได้ว่าทั้งการทดแทนคำสั่งทั้งสองรูปแบบ backticks ( `..cmd..`
) หรือ parens ดอลล่าร์ ( $(..cmd..)
) ยังคงได้รับการสนับสนุนตราบเท่าที่ข้อมูลจำเพาะ
สิ่งที่สกัดมา
การทดแทนคำสั่งอนุญาตให้เอาต์พุตของคำสั่งถูกแทนที่ด้วยชื่อคำสั่งเอง การทดแทนคำสั่งจะเกิดขึ้นเมื่อคำสั่งถูกปิดล้อมดังนี้:
$(command)
or (backquoted version):
`command`
เชลล์จะขยายการทดแทนคำสั่งโดยการดำเนินการคำสั่งในสภาพแวดล้อม subshell (ดูที่ Shell Execution Environment) และแทนที่การแทนที่คำสั่ง (ข้อความของคำสั่งรวมถึงการปิดล้อม$()
หรือแบ็กโคต์) ด้วยเอาต์พุตมาตรฐานของคำสั่ง <newline> ตัวอักษรในตอนท้ายของการทดแทน อักขระ <newline> แบบฝังก่อนสิ้นเอาต์พุตจะไม่ถูกลบออก อย่างไรก็ตามอาจถูกใช้เป็นตัวคั่นฟิลด์และตัดออกในระหว่างการแยกฟิลด์ขึ้นอยู่กับค่าของ IFS และการอ้างอิงที่มีผล หากผลลัพธ์มีไบต์เป็นโมฆะพฤติกรรมจะไม่ได้รับการกำหนด
ภายในสไตล์ backquoted ของแทนคำสั่ง<ทับขวา>จะเก็บความหมายที่แท้จริงของมันยกเว้นเมื่อตามด้วย: '$', ' \`
' หรือ<ทับขวา> การค้นหา backquote ที่ตรงกันจะต้องเป็นไปตาม backquote ที่ไม่มีการ Escape แรก ในระหว่างการค้นหานี้หากพบ backquote ที่ไม่ได้ใช้ Escape ภายในข้อคิดเห็นเชลล์, here-document, การแทนที่คำสั่งแบบฝังของ$(command)
ฟอร์มหรือสตริงที่ยกมาผลลัพธ์ที่ไม่ได้กำหนดจะเกิดขึ้น สตริงที่มีเครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายคำพูดคู่ที่เริ่มต้น แต่ไม่สิ้นสุดภายใน`...`
ลำดับ "" จะสร้างผลลัพธ์ที่ไม่ได้กำหนด
ด้วย$(command)
รูปแบบตัวละครทั้งหมดที่ตามหลังวงเล็บเปิดเพื่อจับคู่วงเล็บปิดที่ตรงกันประกอบด้วยคำสั่ง เชลล์สคริปต์ที่ถูกต้องใด ๆ สามารถใช้สำหรับคำสั่งยกเว้นสคริปต์ที่ประกอบด้วยทิศทางใหม่ซึ่งสร้างผลลัพธ์ที่ไม่ระบุ
แล้วทำไมทุกคนถึงพูดว่า backticks นั้นเลิกใช้แล้ว
เพราะกรณีการใช้งานส่วนใหญ่ควรจะใช้ประโยชน์จากรูปแบบเงินดอลลาร์แทนการตีกลับ (คัดค้านในแง่แรกข้างต้น) ไซต์ที่มีชื่อเสียงมากที่สุดหลายแห่ง (รวมถึง U&L) มักระบุสิ่งนี้เช่นกันตลอดจนเป็นคำแนะนำที่ดี คำแนะนำนี้ไม่ควรสับสนกับแผนการที่ไม่มีอยู่จริงเพื่อลบการสนับสนุน backticks ออกจาก shells
หมายเหตุ:ข้อความที่ตัดตอนมาที่สามนี้ (ด้านบน) แสดงต่อไปในหลาย ๆ สถานการณ์ที่ backticks ใช้งานไม่ได้ แต่วิธี parens dollar ที่ใหม่กว่านั้นเริ่มต้นด้วยย่อหน้าต่อไปนี้:
นอกจากนี้ไวยากรณ์ backquote มีข้อ จำกัด ทางประวัติศาสตร์เกี่ยวกับเนื้อหาของคำสั่งฝังตัว แม้ว่ารูปแบบ "$ ()" ที่ใหม่กว่าสามารถประมวลผลสคริปต์ฝังตัวที่ถูกต้องชนิดใดรูปแบบ backquote ไม่สามารถจัดการกับสคริปต์ที่ถูกต้องซึ่งรวมถึง backquotes
หากคุณอ่านต่อในส่วนนั้นความล้มเหลวจะถูกเน้นให้เห็นว่าพวกเขาจะล้มเหลวในการใช้ backticks แต่ทำงานโดยใช้สัญลักษณ์ดอลลาร์แบบใหม่
สรุปผลการวิจัย
ดังนั้นจึงเป็นเรื่องดีที่คุณใช้เงินดอลลาร์แทนการตีกลับ แต่คุณไม่ได้ใช้สิ่งที่ได้รับการ "เลิก" ในทางเทคนิคเพราะใน "สิ่งนี้จะหยุดทำงานอย่างสมบูรณ์ในบางจุดที่วางแผนไว้"
หลังจากอ่านทั้งหมดนี้คุณควรจะมีเวลาห่างที่คุณควรอย่างยิ่งที่จะใช้เงินดอลลาร์ parens เว้นแต่คุณโดยเฉพาะต้องเข้ากันได้กับจริงเดิมไม่ใช่ POSIX เปลือกบอร์น
cd
ไปยังไดเรกทอรีเพื่อดูว่าเหตุใด$(...)
สัญกรณ์ใช้งานง่ายกว่าเครื่องหมายคำพูดซ้อนหลัง