“export”在shell编程中有什么作用?[副本]

s3fp2yjn  于 2023-08-07  发布在  Shell
关注(0)|答案(3)|浏览(76)

此问题在此处已有答案

Defining a variable with or without export(15个回答)
4年前关闭。
据我所知,变量赋值是一样的,不管它前面有没有“export”。这是干什么的

6qftjkof

6qftjkof1#

导出的变量(如$HOME$PATH)可用于(继承)由将它们导出为环境变量的shell运行的其他程序(以及由这些其他程序运行的程序,等等)。常规(非导出)变量对其他程序不可用。

$ 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内置的条目,以及有关命令执行环境和环境的章节。
请注意,未导出的变量将可用于通过( ... )和类似符号运行的子shell,因为这些子shell是主shell的直接克隆:

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


subshell可以改变它自己的任何变量的副本,无论是否导出,并且可能会影响它运行的进程所看到的值,但是当然,subshell的更改不会影响父shell中的变量。
关于子shell的一些信息可以在Bash手册的命令分组和命令执行环境下找到。

vawmfj5a

vawmfj5a2#

它使分配对子进程可见。

$ foo=bar
$ bash -c 'echo $foo'

$ export foo
$ bash -c 'echo $foo'
bar

字符串

tyky79it

tyky79it3#

这通常取决于 shell 。对于bash,它将变量标记为“可导出”,这意味着它将显示在您运行的任何子进程的环境中。
未导出的变量仅在 current 进程(shell)中可见。
来自bash手册页:

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

提供的名称被标记为自动导出到随后执行的命令的环境。
如果给出了-f选项,则名称引用函数。如果没有给出名称,或者提供了-p选项,则将打印在此shell中导出的所有名称的列表。
-n选项将删除每个名称中的导出属性。
如果变量名后跟=word,则变量的值被设置为word
export返回退出状态0,除非遇到无效选项,其中一个名称不是有效的shell变量名称,或者-f提供的名称不是函数。
您还可以使用typeset命令将变量设置为可导出,并使用set -a自动标记所有将来的变量创建或修改。

相关问题