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

时间:2012-05-26 14:30:50

标签: bash shell

我有以下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,我可以看到它的价值。

1 个答案:

答案 0 :(得分:5)

export FOO=/some/path

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

编辑:删除了不准确之处;另外,非常感谢@DonCallisto。