อะไรคือความแตกต่างระหว่างชุด env ประกาศและส่งออกเมื่อตั้งค่าตัวแปรในเปลือก Linux?


17

ความแตกต่างระหว่างคืออะไรset, env, declareและexportเมื่อตั้งค่าตัวแปรในเปลือกลินุกซ์เช่นbash?


1
ทำไมคำถามนี้ถึงได้รับการโหวต
l0b0

คำตอบ:


5

ดูเหมือนว่าชุดและประกาศจะแตกต่างกันเล็กน้อยด้วยชุดที่มีประสิทธิภาพมากขึ้น

ดูที่ "ประกาศ" ภายใต้https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins ประกาศ: "ประกาศตัวแปรและกำหนดคุณลักษณะหากไม่มีชื่อให้แสดงค่าของตัวแปร แทน.

ตั้ง "set" ภายใต้https://www.gnu.org/software/bash/manual/bash.html#The-Set-Builtin * set: "builtin นี้ซับซ้อนมากจนสมควรได้รับส่วนของตัวเอง set ช่วยให้คุณสามารถ เปลี่ยนค่าของตัวเลือกเชลล์และตั้งค่าพารามิเตอร์ตำแหน่งหรือเพื่อแสดงชื่อและค่าของตัวแปรเชลล์ "

ENV เป็นตัวแปรสภาพแวดล้อมใน Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables env เป็นคำสั่ง Linux ฉันคิดว่านี่เป็นข้อมูลอ้างอิงที่ดี: /unix/103467/what-is-env-command-doing

ฉันคิดว่านี่เป็นคำอธิบายที่ดีสำหรับการส่งออก: http://www.unix.com/302531838-post2.html

นอกจากนี้: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * การส่งออก (จาก Bourne): "ทำเครื่องหมายแต่ละชื่อเพื่อส่งผ่านไปยังกระบวนการลูกในสภาพแวดล้อม"

รหัสยืมจาก URL ด้านบน:

root@linux ~# x=5                <= here variable is set without export command
root@linux ~# echo $x
5
root@linux ~# bash               <= subshell creation
root@linux ~# echo $x            <= subshell doesnt know $x variable value
root@linux ~# exit               <= exit from subshell
exit
root@linux ~# echo $x            <= parent shell still knows $x variable
5
root@linux ~# export x=5         <= specify $x variable value using export command
root@linux ~# echo $x            <= parent shell doesn't see any difference from the first declaration
5
root@linux ~# bash               <= create subshell again
root@linux ~# echo $x            <= now the subshell knows $x variable value
5
root@linux ~#

declareและsetและenv? ประกาศการส่งออกเทียบกับ?
Pacerier

ฉันต้องลงคะแนนนี่เพราะมันไม่ได้ตอบคำถาม
Daniel C. Sobral

แจ้งให้เราทราบหากนี่เป็นสิ่งที่ดีกว่า
Shawn P.

1

ก่อนอื่นคุณต้องเข้าใจenvironment variablesและshell variablesไม่เหมือนกัน

จากนั้นคุณควรรู้ว่ากระสุนมีคุณสมบัติที่ควบคุมการทำงานของมัน คุณลักษณะเหล่านี้ไม่ใช่สภาพแวดล้อมหรือตัวแปรของเชลล์

ตอนนี้เพื่อตอบคำถามของคุณ

  1. env: ไม่มีตัวเลือกใด ๆ แสดงตัวแปรสภาพแวดล้อมปัจจุบันด้วยค่าของมัน; อย่างไรก็ตามสามารถใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวด้วยการ-iตั้งค่าสถานะ
  2. set: ไม่มีตัวเลือกชื่อและความคุ้มค่าของตัวแปรเชลล์แต่ละตัวจะแสดง * ~ จากการรันman setใน rhel; นอกจากนี้ยังสามารถใช้ในการตั้งแอตทริบิวต์เปลือก คำสั่งนี้ไม่ได้ตั้งค่าสภาพแวดล้อมหรือตัวแปรเปลือก
  3. declare: ไม่มีตัวเลือกใด ๆ เช่นเดียวกับenv; ยังสามารถใช้เพื่อตั้งค่าตัวแปรเชลล์
  4. export: ทำให้ตัวแปร สภาพแวดล้อมตัวแปรเชลล์

ในระยะสั้น:

  1. set ไม่ได้ตั้งค่าตัวแปร shell หรือ environment
  2. env สามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียว
  3. declare ตั้งค่าตัวแปรเชลล์
  4. export ทำให้ตัวแปรตัวแปรสภาพแวดล้อมเชลล์

NOTE declare -x VAR=VALสร้างตัวแปรเชลล์และส่งออกทำให้ตัวแปรสภาพแวดล้อม

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