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

kno*_*cte 1 bash shell

我有以下bash脚本(名为"env.bash")由source命令使用:

#!/bin/bash
FOO=/some/path
Run Code Online (Sandbox Code Playgroud)

然后我有以下bash脚本(名为"compile.bash"):

#!/bin/bash
if [ -z "$FOO" ]; then
    echo "Need to set FOO, did you forget to source env.bash?"
    exit 1
fi 
./compile-something
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做:

source env.bash
./compile.bash
Run Code Online (Sandbox Code Playgroud)

我得到"需要设置FOO",为什么?如果我回复$ FOO,我可以看到它的价值.

Ama*_*dan 5

export FOO=/some/path
Run Code Online (Sandbox Code Playgroud)

这应该工作.原因是shell脚本将在子shell中运行,子shell具有自己的环境副本; 超级shell的变量通常不可见.执行时export,您将导出的变量副本可用于子shell.

编辑:删除不准确; 另外,感谢@DonCallisto提供了一个好点.