กรณีแรก:
echo $'$foo'
echos ใด$foo
(หมายถึง$
คำสั่งแรกในคำสั่ง echo ของฉันถูกดร็อป)
ครั้งแรกที่$
เรียกใช้เป็นคำสั่ง Echo ไม่ต้องการช่องว่างระหว่างการโต้เถียง
ดังนั้นสะท้อน$'$foo'
การขยายตัวในการเรียกใช้คำสั่ง$
(ซึ่งไม่ได้เป็นคำสั่งจึงไม่สนใจมัน) '$foo'
แล้วสะท้อน สิ่งที่อยู่ใน''
มูลค่าที่ตราไว้ - มันไม่ได้ขยายหรืออะไร คุณสามารถใส่สิ่งที่คุณต้องการใน '' และไม่มีอะไรเกิดขึ้น
หากคุณแทนที่$
ด้วย$$
echos ID กระบวนการ
ประการที่สอง:
echo $"$foo"
echos นี้pwd
(ซึ่งหมายความว่า bash จะขยาย$foo
, ตัวแปรของฉัน, เป็นค่าของมัน)
นั่นเป็นเพราะ""
ไม่ได้ป้องกันไม่ให้ขยายตัว ""
โดยปกติจะใช้เพื่อให้แน่ใจว่ามีค่าที่จะเปรียบเทียบ
ถ้าคุณมีตัวแปรที่อาจจะเป็นที่ว่างเปล่า (เช่นมันเป็นจากgrep
ผล) แล้วคุณต้องการที่จะเปรียบเทียบกับค่าอื่น / ""
ตัวแปรที่คุณต้องใส่ตัวแปรแรกใน สิ่งนี้ทำให้มั่นใจได้ว่าจะมีการเปรียบเทียบการตรวจสอบอยู่เสมอแทนที่จะเป็นเพียงส่วนที่ว่างเปล่าของรหัส (ตามที่ bash เห็น) ซึ่งทำให้เกิดข้อผิดพลาด
ในที่สุดหมายเลข 3 สิ่งนี้น่าสนใจ
echo $`$foo`
เสียงสะท้อนนี้$~/scripts
(ฉันคาดว่าจะพิมพ์~/scripts
และไม่$~/scripts
)
นั่นเป็นเพราะ (ในกรณีนี้) เสียงสะท้อนกำลังพิมพ์$
ตัวอักษรก่อน การใส่บางสิ่งลงใน backticks ทำให้ค่าของตัวแปรถูกเรียกใช้เป็นคำสั่ง (วิธีที่ดีกว่าที่จะทำใน bash รุ่นล่าสุดคือ$(command)
)
ดังนั้นก่อนมัน Echos $
แล้วก็ขยาย`$foo`
ไปซึ่งดำเนินการและผลตอบแทน`pwd`
~/Scripts
แต่เรามี$
การพิมพ์ก่อนหน้านี้ - $~/Scripts
เพื่อให้การส่งออกทั้งหมด