用或不用导出定义一个变量

什么是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

链接地址: http://www.djcxy.com/p/97053.html

上一篇: Defining a variable with or without export

下一篇: Square brackets and