Sự khác nhau giữa là gì set
, env
, declare
và export
khi thiết lập một biến trong một vỏ Linux, chẳng hạn như bash
?
Sự khác nhau giữa là gì set
, env
, declare
và export
khi thiết lập một biến trong một vỏ Linux, chẳng hạn như bash
?
Câu trả lời:
Có vẻ như tập hợp và khai báo hơi khác nhau, với tập hợp mạnh hơn.
Xem "khai báo" trong https://www.gnu.org/software/bash/manual/bash.html#Bash-Builtins khai báo: "Khai báo các biến và cung cấp cho chúng các thuộc tính. Nếu không có tên nào được đưa ra, thì sẽ hiển thị các giá trị của biến thay thế.
Đặt "set" trong https://www.gnu.org/software/bash/manual/bash.html#The-set-Builtin * set: "Nội dung này phức tạp đến mức nó xứng đáng với phần riêng của nó. Bộ cho phép bạn thay đổi giá trị của tùy chọn shell và đặt tham số vị trí hoặc để hiển thị tên và giá trị của biến shell. "
ENV là một biến môi trường trong Bash: https://www.gnu.org/software/bash/manual/bash.html#Bash-Variabled env là một lệnh Linux. Tôi nghĩ rằng đây là một tài liệu tham khảo tốt: /unix/103467/what-is-env-command-doing
Tôi nghĩ rằng đây là một lời giải thích tốt về xuất khẩu: http://www.unix.com/302531838-post2.html
Ngoài ra: https://www.gnu.org/software/bash/manual/bash.html#Bourne-Shell-Builtins * export (từ Bourne): "Đánh dấu mỗi tên được truyền cho các tiến trình con trong môi trường."
Mượn mã từ URL ở trên:
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
và set
và env
? Xuất khẩu vs khai báo?
Đầu tiên, bạn phải hiểu điều đó environment variables
và shell variables
không giống nhau.
Sau đó, bạn nên biết rằng shell có các thuộc tính chi phối cách thức hoạt động của nó. Các thuộc tính này không phải là môi trường cũng không phải là biến shell.
Bây giờ, để trả lời câu hỏi của bạn.
env
: không có bất kỳ tùy chọn nào, hiển thị các biến môi trường hiện tại với các giá trị của chúng; Tuy nhiên có thể được sử dụng để đặt biến môi trường cho một lệnh với -i
cờset
: không có tùy chọn, tên và giá trị của từng biến shell được hiển thị * ~ từ khi chạy man set
trong rrc; cũng có thể được sử dụng để thiết lập thuộc tính shell . Lệnh này KHÔNG đặt môi trường cũng như biến shell .declare
: không có bất kỳ tùy chọn nào, giống như env
; cũng có thể được sử dụng để đặt biến shellexport
: làm biến shell shell biến môi trườngNói ngắn gọn:
set
không đặt shell cũng như biến môi trườngenv
có thể đặt biến môi trường cho một lệnhdeclare
đặt biến shellexport
làm cho các biến môi trường biếnLƯU Ý
declare -x VAR=VAL
tạo biến vỏ và cũng xuất nó, biến nó thành biến môi trường.