source(命令)设置FOO的bash脚本不会使它对其他bash脚本可见

source(命令)设置FOO的bash脚本不会使它对其他bash脚本可见,bash,shell,Bash,Shell,我有以下bash脚本(名为“env.bash”)供源命令使用: #!/bin/bash FOO=/some/path 然后我有以下bash脚本(名为“compile.bash”): 但是,如果我这样做: source env.bash ./compile.bash 我得到“需要设置FOO”,为什么?如果我回显$FOO,我可以很好地看到它的值 export FOO=/some/path 这应该行得通。原因是shell脚本将在一个子shell中运行,该子shell有自己的环境副本;超级shel

我有以下bash脚本(名为“env.bash”)供源命令使用:

#!/bin/bash
FOO=/some/path
然后我有以下bash脚本(名为“compile.bash”):

但是,如果我这样做:

source env.bash
./compile.bash
我得到“需要设置FOO”,为什么?如果我回显$FOO,我可以很好地看到它的值

export FOO=/some/path
这应该行得通。原因是shell脚本将在一个子shell中运行,该子shell有自己的环境副本;超级shell的变量通常不可见。执行导出时,将使导出变量的副本可用于子shell

编辑:删除错误;另外,感谢@DonCallisto的精彩发言

这应该行得通。原因是shell脚本将在一个子shell中运行,该子shell有自己的环境副本;超级shell的变量通常不可见。执行导出时,将使导出变量的副本可用于子shell


编辑:删除错误;另外,感谢@DonCallisto的一个好观点。

一切都很好,但您忘记了一点:当您导出时,您将在子shell中创建一个副本。所以,就像重新定义变量一样。但这不是一个“全局”变量,因为它是一个副本。这很好,但您忘记了一点:当您导出时,您将在子shell中创建一个副本。所以,就像重新定义变量一样。但这不是一个“全局”变量,因为它是一个副本。。
export FOO=/some/path