Câu trả lời:
Đối với hệ vỏ tương thích POSIX (bao gồm Bash), tiêu chuẩn cho biết:
2.5.3 Biến Biến Shell
sẽ được khởi tạo từ môi trường [...] Nếu một biến được khởi tạo từ môi trường, nó sẽ được đánh dấu để xuất ngay lập tức; xem xuất khẩu đặc biệt tích hợp. Các biến mới có thể được xác định và khởi tạo với các phép gán biến, [vv]
Và về export
:
export name[=word]...
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 đó.
Vì vậy, từ quan điểm của shell, chỉ có các biến. Một số trong số chúng có thể đến từ môi trường khi vỏ được khởi động và một số trong số chúng có thể được xuất sang môi trường của các quá trình mà vỏ bắt đầu.
("Môi trường" thực sự chỉ là một chuỗi các chuỗi được truyền cho tiến trình khi nó bắt đầu. Khi tiến trình đang chạy, nó có thể làm bất cứ điều gì nó thích với nó, sử dụng nó, bỏ qua nó, ghi đè lên nó. khi bắt đầu các quá trình khác có thể là một điều khác, mặc dù tất nhiên, thông thường chỉ cần vượt qua tất cả các biến môi trường một lần nữa.)
Nếu bạn đang sử dụng một số vỏ không phải POSIX, chẳng hạn như csh
, mọi thứ có thể khác:
$ csh
% echo $foo
foo: Undefined variable.
% setenv foo bar
% echo $foo
bar
% set foo=asdf
% echo $foo
asdf
% env |grep foo
foo=bar
% exit
Đây là một và cùng một biến. Trong shell, trái ngược với hầu hết các ngôn ngữ lập trình khác, các biến môi trường và biến shell có cùng không gian tên. Trong shell, một biến môi trường là một biến shell đã được xuất với export
.
Xem, ví dụ, câu trả lời của tôi cho câu hỏi trước của bạn " Sự khác biệt trong cách sử dụng giữa các biến shell và biến môi trường là gì? "
Shell Biến chỉ có thể được sử dụng cho shell hiện tại, nó không thể được sử dụng trong toàn hệ thống. Mặt khác, Biến môi trường có thể được sử dụng System Wide. Theo quy ước Shell Biến được viết dưới dạng chữ thường trong khi Biến môi trường được viết dưới dạng chữ hoa. Bạn có thể làm cho một biến shell hoạt động như một biến môi trường, bạn chỉ cần xuất nó.