ความแตกต่างระหว่าง:
a=b
และ
export a=b
ในทุบตี?
ฉันเข้าใจว่าพวกเขาทั้งสองกำหนดตัวแปรสภาพแวดล้อม แต่ฉันไม่เข้าใจความแตกต่างอย่างเต็มที่
ความแตกต่างระหว่าง:
a=b
และ
export a=b
ในทุบตี?
ฉันเข้าใจว่าพวกเขาทั้งสองกำหนดตัวแปรสภาพแวดล้อม แต่ฉันไม่เข้าใจความแตกต่างอย่างเต็มที่
คำตอบ:
export
เผยแพร่ตัวแปรไปยังกระบวนการย่อย
ตัวอย่างเช่นถ้าคุณทำ
FOO=bar
ดังนั้นกระบวนการย่อยที่ตรวจสอบ FOO จะไม่พบตัวแปรในขณะนั้น
export FOO=bar
จะอนุญาตให้กระบวนการย่อยค้นหาได้
แต่ถ้าFOO
มีการกำหนดไว้แล้วว่าเป็นตัวแปรสภาพแวดล้อมจากนั้นFOO=bar
จะแก้ไขค่าของตัวแปรสภาพแวดล้อมนั้น
ตัวอย่างเช่น:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
เชลล์ที่เก่ากว่าไม่รองรับexport FOO=bar
ไวยากรณ์ FOO=bar; export FOO
คุณต้องเขียน
export
" คุณจะไม่ได้กำหนดตัวแปรสภาพแวดล้อม แต่เป็นเพียงตัวแปรเชลล์ ตัวแปรเชลล์พร้อมใช้งานสำหรับกระบวนการเชลล์เท่านั้น ตัวแปรสภาพแวดล้อมที่มีอยู่เพื่อใด ๆกระบวนการที่ตามมาไม่ได้เป็นเพียงเปลือกหอย นอกจากนี้ subshells เป็นคำสั่งที่อยู่ในวงเล็บซึ่งมีการเข้าถึงตัวแปรเชลล์ในขณะที่สิ่งที่คุณกำลังพูดถึงคือกระบวนการลูกที่เกิดขึ้นเป็นเชลล์
หากคุณไม่ได้ใช้export
คุณจะไม่ได้กำหนดตัวแปรสภาพแวดล้อม เพียงตัวแปรเชลล์
ตัวแปรเชลล์พร้อมใช้งานสำหรับกระบวนการเชลล์เท่านั้น ตัวแปรสภาพแวดล้อมพร้อมใช้งานสำหรับกระบวนการที่ตามมาไม่ใช่แค่เชลล์
นอกจากนี้หากคุณต้องการให้ตัวแปรพร้อมใช้งานสำหรับการเรียกเชลล์โดยไม่ต้องใช้การส่งออกคุณสามารถทำได้:
ไฟล์ a.ksh คือ -
#!/bin/ksh
FOO=bar
บนพรอมต์ให้เรียกใช้สิ่งนี้
> . a.ksh
สิ่งนี้จะเรียกใช้คำสั่งภายในเชลล์เดียวกันและ $ FOO จะพร้อมใช้งาน
ในขณะที่
> a.ksh
จะทำให้ $ FOO ใช้ได้เฉพาะภายใน a.ksh หลังจากการเรียกไปยัง a.ksh จะไม่มีอยู่จริง
นอกเหนือจากคำตอบที่ได้รับแล้วคำสั่งทั้งสองนี้ไม่จำเป็นต้องนิยาม (เช่นสร้าง vs set) ตัวแปรสภาพแวดล้อมเนื่องจาก "a" อาจมีอยู่แล้วในฐานะเชลล์หรือตัวแปรสภาพแวดล้อม
ในกรณีหลังทั้งสองงบจะเทียบเท่าอย่างเคร่งครัด