我正在学习Bash并遇到一个问题。当我自定义环境时,我在.bash_profile中添加PATH=$PATH:$My-own-Path
。
教程告诉我应该使用这个:export PATH=$PATH:$My-own-Path
那么,有什么区别?
答案 0 :(得分:2)
其他人已经回答了export
的含义,这里以及这个被标记为重复的问题。
要回答您的确切具体问题,请在此特定案例中,无差异。为什么?在初始化过程的某个地方,变量PATH
已经被导出。已导出的变量值的更改不需要另一个export
;这是自动的。以后启动的流程将获得新值。
答案 1 :(得分:1)
export
使环境变量可用于子进程
答案 2 :(得分:0)
来自man bash
:
...
export
和declare -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调用它们"跟踪别名")。