Bri*_*new 37

export 使变量可用于子进程.

也就是说,如果从脚本中生成一个新进程k,除非您使用该变量,否则该子进程将无法使用该变量export.请注意,如果在子流程中更改此变量,则更改在父流程中可见.

有关更多详细信息,请参阅本文档的第3.2.3节.


Mih*_*eac 21

我创建了一个简单的脚本来显示差异:

$ cat script.sh 
echo $answer
Run Code Online (Sandbox Code Playgroud)

让我们试试吧 export

$ answer=42
$ ./script.sh 

$ . script.sh 
42
Run Code Online (Sandbox Code Playgroud)

只有在使用相同的进程执行脚本(即同一个bash实例,使用source/ .)时才知道该值

现在,使用export:

$ export answer=42
$ ./script.sh 
42
$ . script.sh 
42
Run Code Online (Sandbox Code Playgroud)

该值是子进程已知的.

因此,如果您希望子进程知道变量的值,那么您应该使用export.


cda*_*rke 14

即使在Windows上,每个进程都有一个称为环境块的内存,它包含环境变量.创建新进程时,默认情况下,父进程的环境块将复制到子进程,因此环境变量是将文本数据传递给子进程的简单方法.

export命令创建环境变量,或将普通局部变量转换为环境变量.在C-shell中,它的少数兑换功能之一是它使用不同的语法环境变量(setenv)到局部变量(set).Bourne shell衍生品,如Bash和Korn shell,隐藏了所有这些.

目前,只能传递简单的值,因此不支持像数组这样的项目(它只导出第一个元素).define除非子进程是相同类型的shell,即bash的另一个实例,否则也不会导出使用set设置的变量属性.这也适用于导出的函数,尽管有时可能会在不同类型的shell(使用eval)之间进行破解.

在Bash(和其他人)中有一个shell设置被调用allexport,这意味着所有变量都是环境变量 - 一般来说可能是一个坏主意.您可以使用C语言提供不同的environemnt块execve,但是从shell中您需要一个程序env,请参阅man env详细信息.