1

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

#!/bin/bash
FOO=/some/path

然后我有以下 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

但是,如果我这样做:

source env.bash
./compile.bash

我得到“需要设置 FOO”,为什么?如果我回显 $FOO 我可以看到它的价值就好了。

4

1 回答 1

5
export FOO=/some/path

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

编辑:删除了不准确之处;另外,感谢@DonCallisto 的一个好点。

于 2012-05-26T14:32:03.297 回答