repo
คำสั่งไม่สามารถดูแลสิ่งที่ชนิดของคำพูดที่จะได้รับ หากคุณต้องการการขยายพารามิเตอร์ให้ใช้เครื่องหมายคำพูดคู่ หากนั่นหมายความว่าคุณเลิกใช้แบ็กสแลชหลาย ๆ อย่างให้ใช้เครื่องหมายคำพูดเดี่ยว ๆ สำหรับส่วนใหญ่แล้วแบ่งออกเป็นสองส่วนเพื่อให้ส่วนที่คุณต้องการขยายเกิดขึ้น
repo forall -c 'literal stuff goes here; '"stuff with $parameters here"' more literal stuff'
คำอธิบายจะตามมาหากคุณสนใจ
เมื่อคุณเรียกใช้คำสั่งจากเชลล์สิ่งที่คำสั่งนั้นรับเป็นอาร์กิวเมนต์คืออาร์เรย์ของสตริงที่สิ้นสุดด้วยค่า null สตริงเหล่านั้นอาจมีอักขระที่ไม่มีค่า null ใด ๆ
แต่เมื่อเชลล์สร้างอาเรย์ของสตริงนั้นจากบรรทัดคำสั่งมันจะตีความอักขระบางตัวเป็นพิเศษ สิ่งนี้ถูกออกแบบมาเพื่อให้พิมพ์คำสั่งง่ายขึ้น ตัวอย่างเช่นช่องว่างปกติจะระบุขอบเขตระหว่างสตริงในอาร์เรย์ ด้วยเหตุผลนั้นบางครั้งการโต้แย้งแต่ละครั้งจึงถูกเรียกว่า "คำ" แต่ข้อโต้แย้งอาจมีช่องว่างอยู่ในนั้น คุณเพียงแค่ต้องการบอกเชลล์ว่าเป็นสิ่งที่คุณต้องการ
คุณสามารถใช้แบ็กสแลชต่อหน้าอักขระใดก็ได้ (รวมถึงช่องว่างหรือแบ็กสแลชอื่น) เพื่อบอกเชลล์ให้ปฏิบัติต่ออักขระนั้นอย่างแท้จริง แต่ในขณะที่คุณสามารถทำสิ่งนี้:
echo \"Thank\ you.\ \ That\'ll\ be\ \$4.96,\ please,\"\ said\ the\ cashier
... มันน่าเบื่อ ดังนั้นเชลล์เสนอทางเลือก: เครื่องหมายคำพูด เหล่านี้มาในสองสายพันธุ์หลัก
เครื่องหมายอัญประกาศคู่ถูกเรียกว่า "การจัดกลุ่มคำพูด" พวกเขาป้องกันไม่ให้ขยายสัญลักษณ์และชื่อแทน แต่ส่วนใหญ่พวกเขากำลังรวมถึงช่องว่างในคำ สิ่งอื่น ๆ เช่นการขยายพารามิเตอร์และคำสั่ง (ประเภทของสิ่งที่ส่งสัญญาณโดย$
) ยังคงเกิดขึ้น และแน่นอนถ้าคุณต้องการให้การอ้างอิงสองตัวอักษรในเครื่องหมายคำพูดคู่คุณต้องแบ็กสแลช:
echo "\"Thank you. That'll be \$4.96, please,\" said the cashier"
เครื่องหมายอัญประกาศเดี่ยวมีความเข้มงวดมากขึ้น ทุกสิ่งระหว่างพวกเขาถูกถ่ายอย่างแท้จริงรวมถึงแบ็กสแลช ไม่มีทางที่จะได้รับการเสนอราคาที่แท้จริงในราคาเดียว
โชคดีที่ใส่เครื่องหมายอัญประกาศในเปลือกไม่ได้ตัวคั่นคำ ; ด้วยตัวเองพวกเขาไม่ได้จบคำ คุณสามารถเข้าและออกจากราคารวมทั้งระหว่างราคาต่าง ๆ ภายในคำเดียวกันเพื่อรับผลลัพธ์ที่ต้องการ:
echo '"Thank you. That'\''ll be $4.96, please," said the cashier'
ดังนั้นง่ายกว่า - มีแบ็กสแลชน้อยลงมากถึงแม้ว่าการอ้างถึงแบบโคลสอัพเดี่ยว, แบ็กสแลช - ตัวอักษร - ตัวอักษรเดียว, การอ้างถึงแบบเปิดเดี่ยวจะใช้เวลาบ้าง
Modern shells ได้เพิ่มสไตล์การอ้างอิงอื่นที่ไม่ได้ระบุโดยมาตรฐาน POSIX ซึ่งเครื่องหมายอัญประกาศเดี่ยวนำหน้าถูกนำหน้าด้วยเครื่องหมายดอลลาร์ สตริงที่ยกมาดังนั้นตามอนุสัญญาที่คล้ายกันกับตัวอักษรสตริงในภาษาการเขียนโปรแกรม ANSI C และบางครั้งจึงเรียกว่า "สตริง ANSI" และ$'
... '
คู่ "ANSI คำพูด" ภายในสตริงดังกล่าวคำแนะนำข้างต้นเกี่ยวกับแบ็กสแลชที่ถูกถ่ายจะไม่มีผลบังคับใช้อีกต่อไป พวกมันกลับมาเป็นพิเศษอีกครั้ง - ไม่เพียง แต่คุณสามารถใส่เครื่องหมายคำพูดเดี่ยวหรือเครื่องหมายแบ็กสแลชได้โดยเตรียมแบ็กสแลชไว้ล่วงหน้า แต่เชลล์ยังขยายการเว้นอักขระ ANSI C (เช่นขึ้น\n
บรรทัดใหม่\t
สำหรับแท็บและ\xHH
อักขระด้วย รหัสเลขฐานสิบหกHH
) อย่างไรก็ตามมิฉะนั้นจะทำงานเป็นสตริงที่มีการเสนอราคาเดี่ยว: ไม่มีการทดแทนพารามิเตอร์หรือคำสั่งเกิดขึ้น:
echo $'"Thank you. That\'ll be $4.96, please," said the cashier'
สิ่งสำคัญที่ควรทราบคือสตริงเดียวที่ได้รับเป็นอาร์กิวเมนต์ของecho
คำสั่งนั้นเหมือนกันในตัวอย่างเหล่านี้ทั้งหมด หลังจากเชลล์ทำการแยกวิเคราะห์บรรทัดคำสั่งแล้วจะไม่มีวิธีสำหรับคำสั่งที่จะเรียกใช้เพื่อบอกสิ่งที่ได้รับการอ้างอิง แม้ว่ามันจะต้องการ
repo forall -c ' ...before... '"$variable"' ...after...'