les*_*ana 52 shell environment-variables
Bash 似乎区分已导出的变量和未导出的变量。
例子:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
Run Code Online (Sandbox Code Playgroud)
set看到变量但env没有。
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
Run Code Online (Sandbox Code Playgroud)
set看到两个变量,但env只看到导出的变量。
我知道这set是一个内置的 bash 而env不是。
导出的变量和不导出的变量之间有什么区别?
Mic*_*zek 48
导出的变量被带入由导出它们的 shell 执行的命令的环境中,而非导出的变量是当前 shell 调用的本地变量。从export手册页:
shell 应为与指定名称对应的变量赋予导出属性,这将使它们处于后续执行命令的环境中。
set输出当前环境,其中包括任何本地非导出变量。env用于在新环境中启动程序,并且没有参数将输出新环境的内容。由于env正在创建一个新环境,因此只有导出的变量会被引入,就像从该 shell 启动的任何程序的情况一样。例如,在第一个 shell 中生成第二个 shell(我曾经$$在内部 shell 中表示提示):
$ FOO=BAR
$ bash
$$ echo $FOO # Note the empty line
$$ exit
$ export FOO
$ bash
$$ echo $FOO
BAR
$$
Run Code Online (Sandbox Code Playgroud)
请注意,导出的是变量,而不仅仅是其值。这意味着一旦 you export FOO,FOO成为全局变量并显示在后续环境中,即使稍后更改:
$ export FOO
$ FOO=BAR
$ bash
$$ echo $FOO
BAR
$$
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23981 次 |
| 最近记录: |