在shell编程中做什么“导出”?

据我所知,variables赋值是相同的,不pipe是否在“导出”之前。 这是为了什么?

导出的variables(如$HOME$PATH )可用于其他程序。 常规(非导出)variables不可用于其他程序。

 $ 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 $ 

有关更多信息,请参阅GNU Bash手册中的内置export条目。

请注意,非导出的variables将可用于通过( ... )和类似符号运行的子壳体:

 $ othervar=present $ (echo $othervar; echo $variable; variable=elephant; echo $variable) present Goodbye elephant $ echo $variable Goodbye $ 

当然,子shell不能影响父shell中的variables。

一些关于子壳体的信息可以在Bash手册的命令分组和命令执行环境下find。

它使分配对子stream程可见。

 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 

那么,它通常取决于壳。 对于bash ,它将variables标记为“可导出的”,意思是它将显示在您运行的任何subprocess的环境中。

非导出variables仅在当前进程(shell)中可见。

bash手册页:

export [-fn] [name[=word]] ...
export -p

提供的名称被标记为自动导出到随后执行的命令的环境。

如果给出-f选项,则名称是指函数。 如果未给出名称,或者提供了-p选项,则会打印在此shell中导出的所有名称的列表。

-n选项会导致从每个名称中删除导出属性。

如果一个variables名后面跟着=word ,则该variables的值被设置为word

除非遇到无效选项,否则export将返回0的退出状态,其中一个名称不是有效的shellvariables名,或者-f提供的名称不是函数。

您也可以使用typeset命令将variables设置为可导出的,并使用set -a自动标记所有将来的variables创build或修改。

导出的variables可用于进程层次结构中的所有进程。 例如,subprocess导出的数据可用于父进程,反之亦然。

出口的主要用例是在两个进程之间共享数据。