คำพูดเดี่ยวในเครื่องหมายคำพูดคู่และคู่มืออ้างอิง Bash


18

ในส่วน 3.1.2.3 ชื่อ Double Quotes คู่มือ Bash พูดว่า:

การใส่อักขระในเครื่องหมายคำพูดคู่ ('"') จะเก็บรักษาค่าตัวอักษรของอักขระทั้งหมดภายในเครื่องหมายคำพูดยกเว้น '$', '`', '\' และเมื่อเปิดใช้งานการขยายประวัติ '!'

ในขณะนี้ฉันกังวลกับคำพูดเดียว ( ')

เป็นความหมายพิเศษที่อธิบายไว้ในส่วนก่อนหน้าหัวข้อ 3.1.2.2 คือ:

การใส่อักขระในเครื่องหมายคำพูดเดี่ยว ( ') จะรักษาค่าตามตัวอักษรของอักขระแต่ละตัวภายในเครื่องหมายคำพูด เครื่องหมายคำพูดเดี่ยวอาจไม่เกิดขึ้นระหว่างเครื่องหมายคำพูดเดี่ยวแม้ว่าจะนำหน้าด้วยเครื่องหมายทับขวา

รวมสอง expositions

 echo "'$a'"

โดยที่ตัวแปรaไม่ได้ถูกกำหนด (ดังนั้น$a= สตริงว่าง) ควรพิมพ์$aบนหน้าจอเนื่องจาก''การมีความหมายพิเศษภายในจะป้องกัน$จากการตีความพิเศษ แต่จะพิมพ์''ออกมา ทำไมเป็นเช่นนั้น

คำตอบ:


21

'อักขระเครื่องหมายคำพูดเดี่ยวในechoตัวอย่างของคุณทำให้ค่าตามตัวอักษร (และสูญเสียความหมาย) ตามที่อยู่ในเครื่องหมายคำพูดคู่ ( ") อักขระที่ล้อมรอบเป็นเครื่องหมายคำพูดคู่

สิ่งที่คุณสามารถทำได้คือพิมพ์คำพูดเดียวแยก:

echo "'"'$a'"'"

หรือหลบหนี$:

echo "'\$a'"

โอ้คุณพูดถูก! ผลลัพธ์สอดคล้องกับคำตอบของคุณ แต่ข้อสงสัยของฉันอยู่ที่บรรทัด "การใส่อักขระในเครื่องหมายคำพูดคู่ ('"') รักษาค่าตัวอักษรของอักขระทั้งหมดภายในเครื่องหมายคำพูดยกเว้น '$', ' ’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde ("") ฉัน' m ขอบคุณสำหรับการตอบสนองอย่างรวดเร็วของคุณขอบคุณ!
Lavya

2
อักขระตัวที่สองที่กล่าวถึงในคู่มือคือ backtick ไม่ใช่เครื่องหมายตัวหนอน
Kenny Evitt

6

คุณเข้าใจผิดว่าเอกสาร:

เพราะมันมีความหมายพิเศษข้างในจะป้องกันดอลลาร์จากการตีความพิเศษ

"การมีความหมายพิเศษ" หมายความว่าการตีความนั้นไม่พิเศษอย่างแท้จริง คำพูดเดี่ยวป้องกันไม่ให้$ขยาย แต่เครื่องหมายคำพูดเดี่ยวในเครื่องหมายคำพูดคู่เป็นอักขระตัวอักษรนั่นคือไม่มีผลอะไรเลย หากคุณต้องการส่งออกแล้วคุณจะต้อง$aecho '$a'


คุณพูดถูก ฉันไม่เพียง แต่เข้าใจผิดในเอกสารเท่านั้น แต่ยังอ่านมันผิด ๆ คุณพูดถูก "คำพูดเดียวในเครื่องหมายคำพูดคู่เป็นตัวอักษร" ขอบคุณ!
Lavya
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.