ไม่สามารถส่งออกหรือตั้งค่าตัวแปรในเปลือกใหม่


1

ฉันพบสิ่งแปลก ๆ เมื่อทำงานกับปัญหา ดูเหมือนว่าคำสั่งนี้จะไม่ทำงาน (การใช้ `เพื่อเติมบรรทัดว่าง)

เมื่อใช้การส่งออก

> /bin/bash -c "echo $FOO; export FOO=BAR; echo $FOO"
`
`

อย่างไรก็ตามคำสั่งนี้ทำงานตามที่คาดไว้

> echo $FOO; FOO=BAR; export FOO=BAR; echo $FOO
`
BAR

ปัญหาเดียวกันเมื่อตั้งค่าด้วย =

> /bin/bash -c "echo $FOO; FOO=BAR; echo $FOO"
`
`

อย่างไรก็ตามคำสั่งนี้เป็น wokrs ตามที่คาดไว้

> echo $FOO; FOO=BAR; FOO=BAR; echo $FOO
`
BAR

ความคิดใด ๆ ที่เกิดขึ้น?

คำตอบ:


2

มันเป็นปัญหาของเครื่องหมายคำพูดคู่ เชลล์ของคุณ (หนึ่ง 'ภายนอก') จะขยายตัว$FOOก่อนที่จะรันคำสั่ง หากคุณตั้งค่า$FOOเป็นบางสิ่ง (สมมุติว่า "FOO") คุณเรียกใช้คำสั่งนี้จริง ๆ

/bin/bash -c "echo FOO; export FOO=BAR; echo FOO"

และถ้าคุณไม่ได้ตั้งค่า FOO คุณจะเรียกใช้คำสั่งนี้

/bin/bash -c "echo ; export FOO=BAR; echo "

โปรดใช้เครื่องหมายคำพูดเดี่ยวเพื่อให้ได้สิ่งที่คุณคาดหวัง

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