bash -c“ v = ค่า; echo $ v” ไม่แสดงผลใด ๆ


9

การดำเนินการต่อไปนี้จากหน้าจอบรรทัด comand:

bash -c "v=value; echo $v"

แสดงอะไร ไม่เป็นไร? ฉันจะกำหนดค่าให้กับตัวแปรภายในการประมวลผลชนิดนี้ได้อย่างไร


คำตอบ:


18

มีสองเชลล์ที่เกี่ยวข้องที่นี่:

  • เชลล์การโทรซึ่งเป็นเชลล์แบบโต้ตอบที่คุณใช้งานอยู่

  • เชลล์ที่ไม่ใช่การล็อกอินไม่ใช่แบบโต้ตอบเกิดโดย bash -c

ตอนนี้ปัญหาคือภายในเครื่องหมายคำพูดคู่ตัวแปรจะถูกขยายเป็นค่าที่เกี่ยวข้องซึ่งเป็นจริงสำหรับเชลล์ใด ๆ

ดังนั้นตามที่คุณใช้เครื่องหมายคำพูดคู่การขยายตัวของตัวแปรกำลัง$vเกิดขึ้นจริงในการเรียกเชลล์ไม่ใช่เชลล์ที่ถูกเรียก แต่การประกาศ, v=valueกำลังเกิดขึ้นบนเชลล์ที่ไม่มีการโต้ตอบที่เรียกว่า

ดังนั้นโดยรวมแล้วคุณมีตัวแปรที่กำหนดไว้ในเชลล์ที่เรียกและขยาย (ก่อนหน้า) ในเชลล์ที่โทร เนื่องจากตัวแปร value ไม่ได้ถูกตั้งค่าในเชลล์การเรียกดังนั้นคุณจะไม่ได้รับอะไรเลย

ตอนนี้เพื่อให้คำจำกัดความของตัวแปรและการขยายตัวเกิดขึ้นในเชลล์ที่เกิดใหม่ให้ใช้เครื่องหมายอัญประกาศเดี่ยวหรือหลบหนี$:

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value

1

ด้วยเครื่องหมายคำพูดคู่$vจะถูกแทนที่ด้วยเชลล์แบบโต้ตอบ ใช้เครื่องหมายคำพูดเดี่ยว:

$ bash -c 'v=value;echo $v'
value
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.