Sự khác biệt giữa:
a=b
và
export a=b
Trong bash?
Tôi hiểu rằng cả hai đều xác định các biến môi trường, nhưng tôi không hiểu đầy đủ về sự khác biệt.
Sự khác biệt giữa:
a=b
và
export a=b
Trong bash?
Tôi hiểu rằng cả hai đều xác định các biến môi trường, nhưng tôi không hiểu đầy đủ về sự khác biệt.
Câu trả lời:
export
tuyên truyền biến cho các quy trình con.
Ví dụ, nếu bạn đã làm
FOO=bar
sau đó một quy trình con đã kiểm tra FOO sẽ không tìm thấy biến trong khi
export FOO=bar
sẽ cho phép các quy trình con tìm thấy nó.
Nhưng nếu FOO
đã đã được định nghĩa là một biến môi trường, sau đó FOO=bar
sẽ thay đổi giá trị của điều đó biến môi trường.
Ví dụ:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Các shell cũ hơn không hỗ trợ export FOO=bar
cú pháp; bạn phải ghi FOO=bar; export FOO
.
export
", bạn không xác định biến môi trường, mà chỉ là biến vỏ. Biến Shell chỉ có sẵn cho quá trình shell; biến môi trường có sẵn cho bất kỳ quá trình tiếp theo, không chỉ vỏ. Ngoài ra, các lớp con là các lệnh được chứa trong dấu ngoặc đơn, chúng có quyền truy cập vào các biến shell, trong khi những gì bạn đang nói đến là các tiến trình con xảy ra là các shell.
Ngoài ra, nếu bạn muốn có sẵn biến cho vỏ gọi mà không cần xuất, bạn có thể thực hiện việc này:
Tệp a.ksh là -
#!/bin/ksh
FOO=bar
Trên dấu nhắc, chạy này là
> . a.ksh
Điều này sẽ chạy các lệnh trong cùng một shell và $ FOO sẽ có sẵn.
Trong khi,
> a.ksh
Sẽ cung cấp $ FOO chỉ trong phạm vi a.ksh, sau khi gọi đến a.ksh, nó sẽ không tồn tại.