此问题在此处已有答案:
Defining a variable with or without export(15个回答)4年前关闭。据我所知,变量赋值是一样的,不管它前面有没有“export”。这是干什么的
6qftjkof1#
导出的变量(如$HOME和$PATH)可用于(继承)由将它们导出为环境变量的shell运行的其他程序(以及由这些其他程序运行的程序,等等)。常规(非导出)变量对其他程序不可用。
$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 $
字符串有关更多信息,请参阅GNU Bash手册中有关export内置的条目,以及有关命令执行环境和环境的章节。请注意,未导出的变量将可用于通过( ... )和类似符号运行的子shell,因为这些子shell是主shell的直接克隆:
export
( ... )
$ othervar=present $ (echo $othervar; echo $variable; variable=elephant; echo $variable) present Hello elephant $ echo $variable Hello $
型subshell可以改变它自己的任何变量的副本,无论是否导出,并且可能会影响它运行的进程所看到的值,但是当然,subshell的更改不会影响父shell中的变量。关于子shell的一些信息可以在Bash手册的命令分组和命令执行环境下找到。
vawmfj5a2#
它使分配对子进程可见。
$ foo=bar $ bash -c 'echo $foo' $ export foo $ bash -c 'echo $foo' bar
字符串
tyky79it3#
这通常取决于 shell 。对于bash,它将变量标记为“可导出”,这意味着它将显示在您运行的任何子进程的环境中。未导出的变量仅在 current 进程(shell)中可见。来自bash手册页:
bash
export [-fn] [name[=word]] ...export -p
export [-fn] [name[=word]] ...
export -p
提供的名称被标记为自动导出到随后执行的命令的环境。如果给出了-f选项,则名称引用函数。如果没有给出名称,或者提供了-p选项,则将打印在此shell中导出的所有名称的列表。-n选项将删除每个名称中的导出属性。如果变量名后跟=word,则变量的值被设置为word。export返回退出状态0,除非遇到无效选项,其中一个名称不是有效的shell变量名称,或者-f提供的名称不是函数。您还可以使用typeset命令将变量设置为可导出,并使用set -a自动标记所有将来的变量创建或修改。
-f
-p
-n
=word
word
typeset
set -a
3条答案
按热度按时间6qftjkof1#
导出的变量(如
$HOME
和$PATH
)可用于(继承)由将它们导出为环境变量的shell运行的其他程序(以及由这些其他程序运行的程序,等等)。常规(非导出)变量对其他程序不可用。字符串
有关更多信息,请参阅GNU Bash手册中有关
export
内置的条目,以及有关命令执行环境和环境的章节。请注意,未导出的变量将可用于通过
( ... )
和类似符号运行的子shell,因为这些子shell是主shell的直接克隆:型
subshell可以改变它自己的任何变量的副本,无论是否导出,并且可能会影响它运行的进程所看到的值,但是当然,subshell的更改不会影响父shell中的变量。
关于子shell的一些信息可以在Bash手册的命令分组和命令执行环境下找到。
vawmfj5a2#
它使分配对子进程可见。
字符串
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
自动标记所有将来的变量创建或修改。