Theo như tôi có thể nói, chuyển nhượng biến là giống nhau cho dù đó là hoặc không phải là trước "xuất khẩu". Cái này để làm gì?"Xuất" làm gì trong lập trình vỏ?
Trả lời
Các biến được xuất (chẳng hạn như $HOME
và $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 grouping và command execution environment trong hướng dẫn sử dụng Bash.
nó làm nhiệm vụ hiển thị cho các quy trình phụ.
[email protected]:~/rentacoder/bin2txt$ foo=bar
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
[email protected]:~/rentacoder/bin2txt$ export foo
[email protected]:~/rentacoder/bin2txt$ bash -c 'echo $foo'
bar
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ànhword
.
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
.
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.
Quá trình con không thể thay đổi giá trị cho cha mẹ của nó. –
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