พิมพ์ข้อความต่อไปนี้ใน Bash:
env | grep USER
และ
set | grep USER
ให้ชื่อผู้ใช้เดียวกันทั้งสองครั้ง
ฉันจะรู้ได้อย่างไรเช่นเมื่อพิมพ์echo $USER
ถ้าเชลล์หรือตัวแปรสภาพแวดล้อมถูกแสดง?
พิมพ์ข้อความต่อไปนี้ใน Bash:
env | grep USER
และ
set | grep USER
ให้ชื่อผู้ใช้เดียวกันทั้งสองครั้ง
ฉันจะรู้ได้อย่างไรเช่นเมื่อพิมพ์echo $USER
ถ้าเชลล์หรือตัวแปรสภาพแวดล้อมถูกแสดง?
คำตอบ:
สำหรับกระสุนที่เข้ากันได้กับ POSIX (รวมถึง Bash) มาตรฐานบอกว่า:
2.5.3 ตัวแปรของเชลล์ตัวแปร
จะต้องเริ่มต้นจากสภาพแวดล้อม[... ] หากตัวแปรเริ่มต้นจากสภาพแวดล้อมตัวแปรนั้นจะถูกทำเครื่องหมายเพื่อส่งออกทันที ดูการส่งออกในตัวพิเศษ ตัวแปรใหม่สามารถกำหนดและเริ่มต้นได้ด้วยการกำหนดตัวแปร[ฯลฯ ]
และเกี่ยวกับexport
:
export name[=word]...
เชลล์จะให้แอ็ตทริบิวต์การเอ็กซ์พอร์ตแก่ตัวแปรที่สอดคล้องกับชื่อที่ระบุซึ่งจะทำให้พวกเขาอยู่ในสภาพแวดล้อมของคำสั่งที่ถูกเรียกใช้งานในภายหลัง
ดังนั้นจากมุมมองของเชลล์มีเพียงตัวแปรเท่านั้น บางส่วนอาจมาจากสภาพแวดล้อมเมื่อเชลล์เริ่มทำงานและบางส่วนอาจถูกส่งออกไปยังสภาพแวดล้อมของกระบวนการที่เชลล์เริ่มทำงาน
("สภาพแวดล้อม" เป็นเพียงกลุ่มของสตริงที่ส่งผ่านไปยังกระบวนการเมื่อเริ่มต้นเมื่อกระบวนการทำงานมันสามารถทำทุกอย่างที่มันชอบใช้ใช้ละเว้นละเว้นเขียนทับมันและสิ่งที่กระบวนการส่งผ่าน เมื่อเริ่มกระบวนการอื่นอาจเป็นอีกสิ่งหนึ่ง แต่แน่นอนว่าเป็นเรื่องปกติที่จะผ่านตัวแปรสภาพแวดล้อมทั้งหมดอีกครั้ง)
หากคุณใช้เชลล์ที่ไม่ใช่ POSIX เช่นcsh
สิ่งต่าง ๆ อาจแตกต่างกัน:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
เหล่านี้เป็นหนึ่งและตัวแปรเดียวกัน ในเชลล์เมื่อเทียบกับภาษาการเขียนโปรแกรมส่วนใหญ่อื่น ๆ ตัวแปรสภาพแวดล้อมและตัวแปรเชลล์ใช้พื้นที่ชื่อเดียวกัน export
ในเปลือกตัวแปรสภาพแวดล้อมเป็นตัวแปรเชลล์ที่มีการส่งออกด้วย
ดูตัวอย่างเช่นคำตอบของคำถามก่อนหน้าของฉัน " ความแตกต่างในการใช้งานระหว่างตัวแปรเชลล์และตัวแปรสภาพแวดล้อมคืออะไร "
ตัวแปรเชลล์สามารถใช้กับเชลล์ปัจจุบันเท่านั้นไม่สามารถใช้งานได้ในทั้งระบบ ในอีกด้านหนึ่งตัวแปรสภาพแวดล้อมสามารถใช้ได้ทั้งระบบ โดยการประชุม Shell Variable ถูกเขียนเป็นตัวพิมพ์เล็กในขณะที่ตัวแปรสภาพแวดล้อมถูกเขียนเป็นตัวพิมพ์ใหญ่ คุณสามารถทำให้ตัวแปรเชลล์ทำงานเป็นตัวแปรสภาพแวดล้อมได้คุณเพียงแค่ส่งออกมัน