Câu trả lời:
Đây là một đoạn trích từ trang Bash man:
export [-fn] [name [= word]] ...
export -p
Các tên được cung cấp được đánh dấu để xuất tự động sang môi trường của các lệnh được thực hiện sau đó. Nếu tùy chọn -f được đưa ra, các tên tham chiếu đến các hàm ...
Nếu bạn chỉ cần biến trong môi trường hiện tại, thì không cần sử dụng xuất.
var=value
Biên tập:
Không xuất khẩu: chỉ môi trường hiện tại. Với xuất khẩu: môi trường hiện tại và môi trường trẻ em.
Đây là một minh chứng về ảnh hưởng của xuất khẩu đối với tính khả dụng của một biến trong môi trường con và những thay đổi trong môi trường con không ảnh hưởng đến cha mẹ:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Sau tiếng vang đầu tiên ( echo "parent..."
) bạn thấy "123" và "456" vì cả hai var1
và var2
đang hoạt động trong môi trường hiện tại. Bạn không thấy giá trị var3
vì nó chưa được đặt.
Sau khi dòng bắt đầu " var3=...
" bạn không thấy giá trị var1
vì nó không được xuất. Bạn làm thấy giá trị cho var2
bởi vì nó đã được xuất khẩu. Bạn thấy giá trị cho var3
vì nó đã được đặt ra cho môi trường con chỉ .
( bash -c
tương đương với việc chạy tập lệnh có nội dung của đối số cho -c
tùy chọn. Tập lệnh hoặc tập lệnh thực thi khác hoặc, trong trường hợp này, đối số bash -c
trở thành con của môi trường hiện tại, do đó, tất nhiên, là đứa trẻ cha mẹ.)
Trong "script", các giá trị của biến được thay đổi. Bây giờ nó xuất ra những giá trị mới.
Khi "tập lệnh" kết thúc, việc thực thi trở về môi trường cha (dòng lệnh trong trường hợp này). Sau tiếng vang cuối cùng, bạn thấy các giá trị ban đầu vì những thay đổi được thực hiện trong môi trường con không ảnh hưởng đến cha mẹ.
export
- để tạo ra các biến có sẵn cho các môi trường con này.
Bạn nói thế
Tôi luôn luôn sử dụng lệnh export để đặt biến môi trường
Theo cách bạn nói, có vẻ như bạn đang thực sự cố gắng hỏi làm thế nào để bạn tạo ra một biến môi trường vẫn tồn tại. Để làm điều đó sẽ yêu cầu bạn đặt export VAR="foo"
câu lệnh của mình vào tệp $ HOME / .bash_profile (nếu bạn đang sử dụng bash). Nếu bạn muốn biến môi trường đó tồn tại cho tất cả người dùng trừ root, thì hãy thêm nó vào / etc / profile. Nếu bạn cũng muốn nó được thêm cho người dùng root, thì hãy đặt nó trong /root/.bash_profile.
Điều này sẽ làm việc cho tất cả các shell đăng nhập trong đó bash là shell được lựa chọn. Đối với shell không đăng nhập, bạn cần sử dụng .bashrc. Tôi không có cái nhìn sâu sắc để cung cấp cho các shell khác: D
xuất khẩu là cách đơn giản nhất để làm điều đó, vậy tại sao không để nó ở đó?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram
Chương trình executethisprogram
S NOT KHÔNG biết giá trị của biến FOO
. Mặt khác, khi sử dụng: FOO=BAR; export FOO; executethisprogram
Chương trình executethisprogram
SILL biết giá trị của biến FOO
.
export FOO
là một lệnh đánh dấu biến FOO
để nó có thể được truy cập bởi các tiến trình con của enConnionment trong đó lệnh được ban hành. Cha mẹ đó có thể là một tập lệnh hoặc một vỏ tương tác.
Bạn cũng có thể làm một cái gì đó như thế này:
VAR=val application
Ví dụ:
LANG=C ls --help
đầu ra bằng tiếng Anh.
LANG=pl_PL ls --help
đầu ra bằng tiếng Ba Lan (nếu có).
Trước đây, bạn không thể xuất VAL = val. Bạn phải
VAL=val; export VAL
ls
ví dụ) mà không ảnh hưởng đến giá trị của biến đó trong môi trường hiện tại (cha mẹ).
ls
là một đứa con của quá trình mà nó được chạy. Nếu tôi gõ ls
tại một dấu nhắc lệnh, shell tương tác là cha và ls
là con. Nếu tôi có một tập lệnh sử dụng ls
thì tập lệnh là cha mẹ và ls
là con.