Các biến được xuất được mang vào môi trường của các lệnh được thực thi bởi shell đã xuất chúng, trong khi các biến không xuất là cục bộ cho lệnh gọi shell hiện tại. Từ export
trang người đàn ông:
Shell sẽ cung cấp thuộc tính export cho các biến tương ứng với các tên được chỉ định, điều này sẽ khiến chúng nằm trong môi trường của các lệnh được thực hiện sau đó.
set
xuất ra môi trường hiện tại, bao gồm bất kỳ biến không xuất cục bộ nào. env
được sử dụng để khởi chạy các chương trình trong một môi trường mới và không có đối số sẽ tạo ra môi trường mới đó sẽ là gì. Vì env
đang tạo một môi trường mới, chỉ có các biến xuất khẩu được đưa qua, như trường hợp của bất kỳ chương trình nào được khởi chạy từ shell đó. Ví dụ: sinh ra lớp vỏ thứ hai trong lớp thứ nhất (tôi đã sử dụng $$
để thể hiện lời nhắc trong lớp vỏ bên trong):
$ FOO=BAR
$ bash
$$ echo $FOO # Note the empty line
$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$
Lưu ý rằng đó là biến được xuất, không chỉ giá trị của nó. Điều này có nghĩa là một khi bạn export FOO
, FOO
trở thành một biến toàn cục và xuất hiện trong các môi trường tiếp theo, ngay cả khi thay đổi sau này:
$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$