我有一个脚本,其中包含几个需要设置为环境变量的变量
变量列表不断变化,我无法修改它。知道我会怎么做吗?
示例文件 foo.sh
FOO="FOOFOO"
BAR="BARBAR"
变量和环境变量是有区别的。如果您执行. foo.sh
并foo.sh
包含该行FOO=value
,则该变量FOO
将在当前进程中分配。它不是环境变量。要成为环境变量(因此可用于子 shell),它必须被导出。但是,shell 提供了一个选项,它使所有变量赋值都将变量提升为环境变量,所以如果你只是这样做:
set -a
. foo.sh
set +a
那么 foo.sh 中的所有变量分配都将成为当前进程中的环境变量。请注意,这并非完全正确:在 bash 中,导出变量使其成为当前 shell 中的环境变量,但在其他 shell(例如破折号)中,导出变量不会使其成为当前 shell 中的环境变量。(但是,它确实会导致在子shell 的环境中对其进行设置。)但是,在shell 的上下文中,变量是否是当前进程中的环境变量并不重要。如果它被导出(并因此设置在任何子流程的环境中),则不在环境中的变量在功能上等同于环境变量。
您在寻找“。” 命令(在 中也拼写为“源” bash
):
source foo.sh
由于您还需要将它们导出到环境中,因此您可能需要做一些额外的工作:
while read -r line; do
export "$line"
done < foo.sh
如果您只想导出具有公共前缀的变量,例如:
BAZ_FOO="FOOFOO"
BAZ_BAR="BARBAR"
你可以简单地这样做:
. foo.sh
variable_list=()
variable_list=( $(set -o posix ; set |\
grep "BAZ_" |\
cut -d= -f1) )
for variable in "${variable_list[@]}"
do
export "$variable"
done