การดำเนินการต่อไปนี้จากหน้าจอบรรทัด comand:
bash -c "v=value; echo $v"
แสดงอะไร ไม่เป็นไร? ฉันจะกำหนดค่าให้กับตัวแปรภายในการประมวลผลชนิดนี้ได้อย่างไร
การดำเนินการต่อไปนี้จากหน้าจอบรรทัด comand:
bash -c "v=value; echo $v"
แสดงอะไร ไม่เป็นไร? ฉันจะกำหนดค่าให้กับตัวแปรภายในการประมวลผลชนิดนี้ได้อย่างไร
คำตอบ:
มีสองเชลล์ที่เกี่ยวข้องที่นี่:
เชลล์การโทรซึ่งเป็นเชลล์แบบโต้ตอบที่คุณใช้งานอยู่
เชลล์ที่ไม่ใช่การล็อกอินไม่ใช่แบบโต้ตอบเกิดโดย 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
ด้วยเครื่องหมายคำพูดคู่$v
จะถูกแทนที่ด้วยเชลล์แบบโต้ตอบ ใช้เครื่องหมายคำพูดเดี่ยว:
$ bash -c 'v=value;echo $v'
value