Sự khác biệt giữa set, env, khai báo và xuất khi đặt biến trong shell Linux là gì?


17

Sự khác nhau giữa là gì set, env, declareexportkhi thiết lập một biến trong một vỏ Linux, chẳng hạn như bash?


1
Tại sao câu hỏi này được bỏ phiếu?
l0b0

Câu trả lời:


5

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 ~#

declaresetenv? Xuất khẩu vs khai báo?
Pacerier

Tôi phải downvote điều này bởi vì nó chỉ đơn giản là không trả lời câu hỏi.
Daniel C. Sobral

Hãy cho tôi biết nếu điều này là tốt hơn.
Shawn P.

1

Đầu tiên, bạn phải hiểu điều đó environment variablesshell variableskhô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.

  1. 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 -icờ
  2. 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 settrong 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 .
  3. 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 shell
  4. export: làm biến shell shell biến môi trường

Nói ngắn gọn:

  1. set không đặt shell cũng như biến môi trường
  2. env có thể đặt biến môi trường cho một lệnh
  3. declare đặt biến shell
  4. export làm cho các biến môi trường biến

LƯ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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.