我有一个脚本,其中包含一些需要设置为环境变量的变量
变量列表不断变化,在我的最后修改它不是一个选择。知道我该怎么做吗?
示例文件foo.sh
FOO="FOOFOO"
BAR="BARBAR"
答案 0 :(得分:41)
变量和环境变量之间存在差异。如果您执行. foo.sh
而foo.sh
包含行FOO=value
,则会在当前流程中分配变量FOO
。它不是环境变量。要成为环境变量(因此可用于子shell),必须将其导出。但是,shell提供了一个选项,使所有变量赋值都将变量提升为环境变量,所以如果您只是这样做:
set -a
. foo.sh
set +a
然后foo.sh中的所有变量赋值将在当前进程中成为环境变量。请注意,这并非严格正确:在bash中,导出变量使其成为当前shell中的环境变量,但在其他shell(例如,破折号)中,导出变量不会使其成为当前shell中的环境变量。 (但它确实会将它设置在子shell的环境中。)然而,在shell的上下文中,如果变量是当前进程中的环境变量并不重要。如果它被导出(因此在任何子进程的环境中设置),则不在环境中的变量在功能上等同于环境变量。
答案 1 :(得分:10)
你在寻找'。'命令(在bash
中拼写为'source'):
source foo.sh
由于您还需要将它们导出到环境中,您可能需要做一些额外的工作:
while read -r line; do
export "$line"
done < foo.sh