Bash中“export”的含义是什么?

时间:2015-04-18 01:17:30

标签: bash cmd export command-line-interface

我正在学习Bash并遇到一个问题。当我自定义环境时,我在.bash_profile中添加PATH=$PATH:$My-own-Path

教程告诉我应该使用这个:export PATH=$PATH:$My-own-Path

那么,有什么区别?

5 个答案:

答案 0 :(得分:2)

其他人已经回答了export的含义,这里以及这个被标记为重复的问题。

要回答您的确切具体问题,请在此特定案例中,无差异。为什么?在初始化过程的某个地方,变量PATH已经被导出。已导出的变量值的更改不需要另一个export;这是自动的。以后启动的流程将获得新值。

答案 1 :(得分:1)

export使环境变量可用于子进程

答案 2 :(得分:0)

来自man bash

  

... exportdeclare -x命令允许在环境中添加和删除参数和函数。如果修改了环境中参数的值,则新值将成为环境的一部分,替换旧值。

同样来自man bash

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

提供的名称标记为自动导出到后续执行的命令的环境。如果给出-f选项,则名称引用函数。如果未给出名称,或者提供了-p选项,则会打印所有导出变量的名称列表。 -n选项导致从每个名称中删除导出属性。如果变量名后跟=word,则变量的值设置为word。 export返回退出状态0,除非遇到无效选项,其中一个名称不是有效的shell变量名,或者-f提供的名称不是函数。

答案 3 :(得分:0)

导出的变量可供其他程序使用。非导出变量不是。

示例:

$ myVar=Foo             #create local
$ env | grep '^myVar='
$ export myVar          #export myVar to child process
$ env | grep '^myVar='
Foo

如果您想了解更多有关此内容,请查看GNU Bash手册

http://www.gnu.org/software/bash/manual/bash.html#index-export

另请注意,未导出的变量可用于使用(...)和其他类似符号运行的子shell

$ thereVar=Bar
$ (echo $thereVar; echo $myVar; $myVar=testing; echo $myVar)
Bar
Foo
Testing
$echo $myVar
Foo

子shell不能影响父shell中的变量

有关子壳的更多信息,请参考:

http://www.gnu.org/software/bash/manual/bash.html#Command-Grouping.html http://www.gnu.org/software/bash/manual/bash.html#Command-Execution-Environment

答案 4 :(得分:0)

每个进程都有一个称为环境块的内存区域。在环境块中是环境变量。它们看起来像普通变量,例如x=42

在大多数shell中(C shell是一个例外),您使用export将普通变量移动到环境块中。该命令还可以创建环境变量,而无需经过中间阶段。如果变量已经在环境块中,则export将无效。

为什么?创建新流程时,默认操作是复制各种核心信息"从父母到孩子。这些包括当前目录,umask,文件描述符表,uid和gid以及环境块

请注意,子级只获取父级环境块的副本,该变量未共享且无法传递回父级(除非使用其他一些进程间)沟通机制)。

您可以使用env程序覆盖此默认行为,但这很少需要。

因此,如果我们使用export在shell脚本中设置环境变量,那么当我们调用其他程序时,我们创建的所有子进程都将获得它们的副本。一些变量名称是众所周知的并且具有特殊含义,PATH环境变量可能是其中最重要的。

PATH环境变量用于在UNIX / Linux上查找程序。每次我们需要加载程序时,都会按照左右顺序搜索PATH中的目录。 Bash还在hash中缓存可执行路径(Korn shell调用它们"跟踪别名")。

相关问题