กรณีแรก:
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เพื่อให้การส่งออกทั้งหมด