2011-09-14 10 views

Trả lời

101

Các biến được xuất (chẳng hạn như $HOME$PATH) có sẵn cho các chương trình khác. Biến thông thường (không xuất) không có sẵn cho các chương trình khác.

$ env | grep '^variable=' 
$         # No environment variable called variable 
$ variable=Hello     # Create local (non-exported) variable with value 
$ env | grep '^variable=' 
$         # Still no environment variable called variable 
$ export variable     # Mark variable for export to child processes 
$ env | grep '^variable=' 
variable=Hello 
$ 
$ export other_variable=Goodbye # create and initialize exported variable 
$ env | grep '^other_variable=' 
other_variable=Goodbye 
$ 

Để biết thêm thông tin, hãy xem mục nhập cho export builtin trong sách hướng dẫn GNU Bash.

Lưu ý rằng các biến phi xuất khẩu sẽ có sẵn cho subshells chạy qua (...) và tương tự như ký hiệu:

$ othervar=present 
$ (echo $othervar; echo $variable; variable=elephant; echo $variable) 
present 
Hello 
elephant 
$ echo $variable 
Hello 
$ 

Các subshell không thể ảnh hưởng đến biến trong vỏ phụ huynh, dĩ nhiên rồi.

Một số thông tin về subshells có thể được tìm thấy dưới command groupingcommand execution environment trong hướng dẫn sử dụng Bash.

+0

Tôi đã thêm một số dòng mới và dòng cũng chỉ hiển thị '$' để hiển thị rõ ràng hơn rằng không có đầu ra từ lệnh 'grep'. Tất nhiên, cảm thấy tự do để rollback nếu bạn nghĩ rằng điều này mất khả năng đọc – fedorqui

12

Vâng, nó thường phụ thuộc vào vỏ. Đối với bash, nó đánh dấu biến là "có thể xuất" nghĩa là nó sẽ hiển thị trong môi trường cho bất kỳ quy trình con nào bạn chạy.

Biến không được xuất chỉ hiển thị từ quá trình hiện tại (vỏ).

Từ trang bash người đàn ông:

export [-fn] [name[=word]] ...
export -p

Tên cung cấp được đánh dấu để xuất khẩu tự động đối với môi trường của các lệnh sau đó thực hiện.

Nếu tùy chọn -f được cung cấp, các tên tham chiếu đến các hàm. Nếu không có tên nào được cung cấp, hoặc nếu tùy chọn -p được cung cấp, một danh sách tất cả các tên được xuất trong vỏ này sẽ được in.

Tùy chọn -n làm cho thuộc tính xuất sẽ bị xóa khỏi mỗi tên.

Nếu tên biến được theo sau bởi =word, giá trị của biến được đặt thành word.

export trả về trạng thái thoát là 0 trừ khi có tùy chọn không hợp lệ, một trong các tên không phải là tên biến hệ vỏ hợp lệ hoặc -f được cung cấp cùng với tên không phải là hàm.

Bạn cũng có thể đặt các biến là có thể xuất với lệnh typeset và tự động đánh dấu tất cả các thay đổi hoặc biến đổi trong tương lai như vậy, với set -a.

-2

Biến được xuất có sẵn cho tất cả quy trình trong phân cấp quy trình. Ví dụ: dữ liệu được xuất bởi quá trình con có sẵn cho quy trình gốc và ngược lại.

Trường hợp sử dụng chính của xuất khẩu là chia sẻ dữ liệu giữa 2 quy trình.

+1

Quá trình con không thể thay đổi giá trị cho cha mẹ của nó. –