ความแตกต่างระหว่างคืออะไรset
, env
, declare
และexport
เมื่อตั้งค่าตัวแปรในเปลือกลินุกซ์เช่นbash
?
ความแตกต่างระหว่างคืออะไรset
, env
, declare
และexport
เมื่อตั้งค่าตัวแปรในเปลือกลินุกซ์เช่นbash
?
คำตอบ:
ดูเหมือนว่าชุดและประกาศจะแตกต่างกันเล็กน้อยด้วยชุดที่มีประสิทธิภาพมากขึ้น
ดูที่ "ประกาศ" ภายใต้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
? ประกาศการส่งออกเทียบกับ?
ก่อนอื่นคุณต้องเข้าใจenvironment variables
และshell variables
ไม่เหมือนกัน
จากนั้นคุณควรรู้ว่ากระสุนมีคุณสมบัติที่ควบคุมการทำงานของมัน คุณลักษณะเหล่านี้ไม่ใช่สภาพแวดล้อมหรือตัวแปรของเชลล์
ตอนนี้เพื่อตอบคำถามของคุณ
env
: ไม่มีตัวเลือกใด ๆ แสดงตัวแปรสภาพแวดล้อมปัจจุบันด้วยค่าของมัน; อย่างไรก็ตามสามารถใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวด้วยการ-i
ตั้งค่าสถานะset
: ไม่มีตัวเลือกชื่อและความคุ้มค่าของตัวแปรเชลล์แต่ละตัวจะแสดง * ~ จากการรันman set
ใน rhel; นอกจากนี้ยังสามารถใช้ในการตั้งแอตทริบิวต์เปลือก คำสั่งนี้ไม่ได้ตั้งค่าสภาพแวดล้อมหรือตัวแปรเปลือกdeclare
: ไม่มีตัวเลือกใด ๆ เช่นเดียวกับenv
; ยังสามารถใช้เพื่อตั้งค่าตัวแปรเชลล์export
: ทำให้ตัวแปร สภาพแวดล้อมตัวแปรเชลล์ในระยะสั้น:
set
ไม่ได้ตั้งค่าตัวแปร shell หรือ environmentenv
สามารถตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวdeclare
ตั้งค่าตัวแปรเชลล์export
ทำให้ตัวแปรตัวแปรสภาพแวดล้อมเชลล์NOTE
declare -x VAR=VAL
สร้างตัวแปรเชลล์และส่งออกทำให้ตัวแปรสภาพแวดล้อม