มีคนบอกฉันว่า:
BASH ไม่ใช่ตัวแปรสภาพแวดล้อม แต่เป็นตัวแปรเชลล์
ความแตกต่างคืออะไร?
มีคนบอกฉันว่า:
BASH ไม่ใช่ตัวแปรสภาพแวดล้อม แต่เป็นตัวแปรเชลล์
ความแตกต่างคืออะไร?
คำตอบ:
$BASH
เป็นตัวแปรโลคัลที่ใช้ได้ในเชลล์ปัจจุบัน (bash) เท่านั้น
ตัวแปรสภาพแวดล้อมเช่น$SHELL
นั้นใช้ได้ทั้งระบบ ในเชลล์ Bash ปัจจุบัน$BASH
ชี้ไปที่พา ธ การประมวลผลของbashในขณะที่$SHELL
ชี้ไปที่เชลล์ที่กำหนดเป็นค่าเริ่มต้น (ซึ่งอาจเป็นค่าเดียวกัน)
สำหรับคำอธิบายของตัวแปรสภาพแวดล้อมดูตัวแปรสภาพแวดล้อมในวิธีใช้ของ Ubuntu
ตัวแปรสภาพแวดล้อมเป็นสากลที่พร้อมใช้งานในโปรแกรมและโปรแกรมย่อย ตัวแปรเชลล์มีอยู่ในเชลล์ปัจจุบันเท่านั้น หากต้องการทำให้ตัวแปรเชลล์พร้อมใช้งานเป็นตัวแปรสภาพแวดล้อมให้ใช้export VARNAME
(โดยไม่ใช้เงินดอลลาร์$
)
ตัวอย่างสำหรับการชี้แจง:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
อีกวิธีหนึ่งในการกำหนดตัวแปรสภาพแวดล้อม:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
ไม่จำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อม stackoverflow.com/questions/7411455/…
export
ตั้งค่าตัวแปรสภาพแวดล้อมสำหรับกระบวนการลูก โพสต์ที่คุณเชื่อมโยงไม่ขัดแย้งกับคำตอบนี้คุณช่วยอธิบายได้ไหมว่าทำไมคุณคิดว่ามันผิด
export
ตั้งค่าตัวแปรสภาพแวดล้อมอย่างแน่นอน
มีความแตกต่าง ตัวแปรของเชลล์และตัวแปรสภาพแวดล้อมจะอธิบายได้ดีกว่าที่ฉันทำได้ แต่นี่เป็นข้อความที่ตัดตอนมาจากมัน:
หากมีการเปลี่ยนแปลงกับตัวแปรเชลล์จะต้อง "ส่งออก" ไปยังตัวแปรสภาพแวดล้อมที่สอดคล้องกันอย่างชัดเจนเพื่อให้กระบวนการย่อยใด ๆ ที่แยกเพื่อดูการเปลี่ยนแปลง จำได้ว่าตัวแปรเชลล์เป็นแบบโลคัลสำหรับเชลล์ที่ถูกนิยามไว้
ตัวแปรเชลล์: ระยะสั้น, ใช้เฉพาะกับอินสแตนซ์ปัจจุบันของเชลล์, ไม่ครอบคลุมระบบ
ตัวแปรสภาพแวดล้อม: การใช้งานระยะยาว, ใช้ได้ทั้งระบบ, อนุญาตจากทั่วโลก
โดยการประชุม Shell Variable มีชื่อเป็นตัวพิมพ์เล็กในขณะที่ Envn ตัวแปรถูกเขียนเป็นตัวพิมพ์ใหญ่
หากต้องการตอบคำถามนี้ก่อนอื่นให้พยายามทำความเข้าใจขอบเขตของตัวแปร
เมื่อคุณสร้างตัวแปรใหม่แบบที่SOME_ENV_VARIABLE="testing.txt"
มันอยู่ในSHELL scope
นั้นหมายความว่ามันสามารถเข้าถึงได้โดยอินสแตนซ์ของเชลล์ที่ผู้ใช้เข้าสู่ระบบเมื่อมีการเปลี่ยนแปลงอินสแตนซ์เช่นคุณเปิดเทอร์มินัลใหม่หรือคุณเปลี่ยนเชลล์ (เช่นคุณ เปลี่ยนเป็นcsh
) คุณไม่สามารถเข้าถึงตัวแปรนั้นได้
เมื่อคุณส่งออกตัวแปรเช่นเดียวกับexport SOME_ENV_VARIABLE
ตัวแปรนั้นจะพร้อมใช้งานในขอบเขตสภาพแวดล้อมซึ่งหมายความว่าในอินสแตนซ์นั้นถ้าคุณเปลี่ยนเชลล์คุณยังคงสามารถเข้าถึงตัวแปรนั้นได้ ให้พยายามทำความเข้าใจกับตัวอย่างต่อไปนี้:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
คล้ายคลึง:สมมติว่าคุณมีอพาร์ทเมนต์สองห้องนอนและแชร์กับเพื่อนร่วมห้องอีกคน พื้นที่ส่วนกลางสามารถเข้าถึงได้โดยทุกคน แต่ไม่ใช่ห้องนอนของคุณตัวแปรสภาพแวดล้อมเป็นพื้นที่ส่วนกลางและตัวแปรเชลล์เป็นเหมือนห้องนอนหากคุณต้องการบางสิ่งในพื้นที่ส่วนกลางทุกคนสามารถเข้าถึงได้ แต่ถ้าคุณเก็บไว้ในห้องนอนของคุณจะทำได้เท่านั้น เข้าถึงได้โดยคุณ
โปรดจำไว้ว่าถ้าเปิดเทอร์มินัลใหม่คุณจะไม่สามารถเข้าถึงตัวแปรตัวใดตัวหนึ่งได้เนื่องจากคุณกำลังเปลี่ยนอินสแตนซ์นั้น เพื่อที่คุณควรเพิ่มตัวแปรของคุณใน.profile
หรือ.bashrc
(ถ้าคุณใช้ทุบตี)