Câu trả lời:
$BASH
là một biến cục bộ chỉ có giá trị trong shell (bash) hiện tại.
Các biến môi trường như $SHELL
là hợp lệ trên toàn hệ thống. Trong shell Bash hiện tại, $BASH
trỏ đến đường dẫn thực thi của bash , trong khi $SHELL
trỏ đến shell được xác định là mặc định (có thể có cùng giá trị).
Để biết giải thích về các biến môi trường, hãy xem Biến môi trường trong Trợ giúp Ubuntu.
Một biến môi trường là có sẵn trên toàn cầu, trong một chương trình và đó là các chương trình con. Một biến shell chỉ có sẵn trong shell hiện tại. Để làm cho một biến shell có sẵn như là một biến môi trường, sử dụng export VARNAME
(không có đô la $
).
Ví dụ để làm rõ:
$ SOME=VAR # define shell variable $SOME
$ echo $SOME
VAR
$ env | grep SOME # note: no output
$ export SOME # turn $SOME into an environment variable
$ env | grep SOME
SOME=VAR
Một cách khác để xác định một biến môi trường:
$ export ANOTHER=VALUE
$ echo $ANOTHER
VALUE
$ env | grep ANOTHER
ANOTHER=VALUE
export
không nhất thiết phải đặt biến môi trường. stackoverflow.com/questions/7411455/
export
không đặt biến môi trường cho các tiến trình con. Bài đăng bạn liên kết không mâu thuẫn với câu trả lời này, bạn có thể làm rõ lý do tại sao bạn nghĩ nó sai?
export
hoàn toàn thiết lập một biến môi trường
Có một sự khác biệt. Biến Shell và Biến môi trường sẽ giải thích điều đó tốt hơn mà tôi có thể, nhưng đây là đoạn trích từ nó:
Nếu một thay đổi được thực hiện cho một biến shell, thì nó phải được "xuất" rõ ràng sang biến môi trường tương ứng để cho bất kỳ quy trình con rẽ nhánh nào nhìn thấy sự thay đổi. Hãy nhớ lại rằng các biến shell là cục bộ của shell mà chúng được xác định.
Để trả lời câu hỏi này trước tiên hãy cố gắng hiểu phạm vi của một biến.
Khi bạn tạo một biến mới giống như SOME_ENV_VARIABLE="testing.txt"
nó nằm trong SHELL scope
, điều đó có nghĩa là nó có thể được truy cập bởi thể hiện của trình bao nơi người dùng đăng nhập. Khi ví dụ thay đổi, bạn mở một thiết bị đầu cuối mới hoặc bạn thay đổi trình bao (ví dụ: bạn chuyển sang csh
) bạn không thể truy cập vào biến đó.
Khi bạn xuất biến đó như biến export SOME_ENV_VARIABLE
đó hiện có sẵn trong phạm vi môi trường, điều đó có nghĩa là trong trường hợp đó nếu bạn thay đổi trình bao, bạn vẫn có thể truy cập vào biến đó. Hãy cố gắng hiểu với ví dụ sau:
[vishrant@localhost]$ SOME_ENV_VARIABLE="testing.txt" #creating variable in bash shell
[vishrant@localhost]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost]$ export SOME_ENV_VARIABLE #variable now available with environment
[vishrant@localhost]$ env | grep SOME_ENV_VARIABLE
SOME_ENV_VARIABLE=testing.txt
[vishrant@localhost]$ csh #changing shell
[vishrant@localhost ~/shell_scripting]$ echo $SOME_ENV_VARIABLE
testing.txt
[vishrant@localhost ~/shell_scripting]$ exit
exit #returned to parent shell
[vishrant@localhost]$ SOME_SHELL_VARIABLE="hello.txt"
[vishrant@localhost]$ csh
[vishrant@localhost ~/shell_scripting]$ echo $SOME_SHELL_VARIABLE
SOME_SHELL_VARIABLE: Undefined variable.
Tương tự: giả sử bạn có một căn hộ hai phòng ngủ và bạn đang chia sẻ nó với một người bạn cùng phòng khác. Khu vực chung có thể được truy cập bởi bất kỳ ai, nhưng không phải phòng ngủ của bạn, biến môi trường giống như khu vực chung và biến vỏ giống như phòng ngủ, nếu bạn có thể truy cập vào khu vực chung thì bất cứ ai cũng có thể truy cập nhưng nếu bạn giữ nó trong phòng ngủ thì chỉ có thể được truy cập bởi bạn.
Hãy nhớ nếu mở một thiết bị đầu cuối mới, bạn sẽ không thể truy cập một trong hai biến vì bạn đang thay đổi thể hiện đó . Vì vậy, bạn nên thêm các biến của mình vào một trong hai .profile
hoặc .bashrc
(nếu bạn đang sử dụng bash).