Jon*_*ler 128
导出的变量,如$HOME
和$PATH
可用于(通过继承)由它们导出的外壳(和那些其他程序运行的程序,等等)作为环境变量运行其他程序.常规(非导出)变量不可用于其他程序.
$ 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
$
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅GNU Bash手册中export
内置条目,以及命令执行环境和环境部分.
请注意,未导出的变量可用于通过( ... )
类似符号运行的子shell ,因为这些子shell是主shell的直接克隆:
$ othervar=present
$ (echo $othervar; echo $variable; variable=elephant; echo $variable)
present
Hello
elephant
$ echo $variable
Hello
$
Run Code Online (Sandbox Code Playgroud)
子shell可以更改自己的任何变量的副本,导出与否,并且可能会影响它运行的进程所看到的值,但子shell的更改当然不会影响父shell中的变量.
有关子shell的一些信息可以在Bash手册中的命令分组和命令执行环境下找到.
jco*_*ctx 55
它使赋值对子进程可见.
jcomeau@intrepid:~/rentacoder/bin2txt$ foo=bar
jcomeau@intrepid:~/rentacoder/bin2txt$ bash -c 'echo $foo'
jcomeau@intrepid:~/rentacoder/bin2txt$ export foo
jcomeau@intrepid:~/rentacoder/bin2txt$ bash -c 'echo $foo'
bar
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 18
嗯,它通常取决于shell.因为bash
,它将变量标记为"可导出",这意味着它将显示在您运行的任何子进程的环境中.
非导出变量仅在当前进程(shell)中可见.
从bash
手册页:
export [-fn] [name[=word]] ...
export -p
提供的名称标记为自动导出到随后执行的命令的环境.
如果
-f
给出了该选项,则名称指的是函数.如果未给出名称,或者-p
提供了该选项,则会打印在此shell中导出的所有名称的列表.该
-n
选项导致从每个名称中删除导出属性.如果后跟变量名
=word
,则将变量的值设置为word
.
export
返回退出状态为0,除非遇到无效选项,其中一个名称不是有效的shell变量名称,或者-f
提供的名称不是函数.
您还可以使用typeset
命令将变量设置为可导出,并使用自动标记所有未来的变量创建或修改set -a
.