用或不用导出定义一个变量
什么是export
?
有什么区别:
export name=value
和
name=value
export
使变量可用于子流程。
那是,
export name=value
意味着变量名称可用于您从该shell进程运行的任何进程。 如果您希望进程使用此变量,请使用export
,然后从该shell运行该进程。
name=value
意味着变量作用域被限制在shell中,并且不可用于任何其他进程。 你会用这个(说)循环变量,临时变量等。
请注意,导出变量不会使父进程可用。 也就是说,在派生进程中指定和导出变量并不会在启动它的进程中可用。
为了说明其他答案的内容:
$ foo="Hello, World"
$ echo $foo
Hello, World
$ bar="Goodbye"
$ export foo
$ bash
bash-3.2$ echo $foo
Hello, World
bash-3.2$ echo $bar
bash-3.2$
其他人已经回答说,出口使变量可用于子壳体,这是正确的,但仅仅是一个副作用。 当你导出一个变量时,它将这个变量放在当前shell的环境中(即shell调用putenv(3)或setenv(3))。 一个进程的环境是通过exec继承的,使得这个变量在subhells中可见。
编辑(用5年的观点):这是一个愚蠢的答案。 “导出”的目的是使变量“处于随后执行的命令的环境中”,无论这些命令是否是子壳体或子过程。 一个简单的实现是将变量简单地放在shell的环境中,但这会使得不可能实现export -p
。
上一篇: Defining a variable with or without export
下一篇: Square brackets and