解决方法
变量和环境变量之间有区别.如果你执行foo.sh和foo.sh包含行FOO =值,则在当前进程中将分配变量FOO.它不是环境变量.要成为一个环境变量(因此可以使用到子shell),它必须被导出.但是,shell提供了一个选项,使所有可变赋值都将变量提升为一个环境变量,所以如果你简单地做:
set -a . foo.sh set +a
那么在foo.sh中的所有变量赋值都将成为当前进程中的环境变量.请注意,这并不完全正确:在bash中,导出变量使其成为当前shell中的环境变量,但在其他shell(例如,破折号)中,导出变量并不会使其成为当前shell中的环境变量. (它确实使它被设置在subshells的环境中.)