Bash 将变量内的变量传递给嵌套脚本
假设我有脚本Bash 将变量内的变量传递给嵌套脚本,bash,Bash,假设我有脚本alpha.sh。过于简化的版本如下: #!/usr/bin/bash ENV_PARAMS_FOR_BRAVO="FOO=bar" result=$($ENV_PARAMS_FOR_BRAVO bash bravo.sh) echo $results 然后是一个脚本bravo.sh,其过度简化的版本是: echo "foo is $FOO" 当我运行上面的alpha脚本时,我得到一个错误,因为它试图执行$ENV_PARAMS_FOR_BRAVO,就好像它是命令本身一样。当我
alpha.sh
。过于简化的版本如下:
#!/usr/bin/bash
ENV_PARAMS_FOR_BRAVO="FOO=bar"
result=$($ENV_PARAMS_FOR_BRAVO bash bravo.sh)
echo $results
然后是一个脚本bravo.sh
,其过度简化的版本是:
echo "foo is $FOO"
当我运行上面的alpha
脚本时,我得到一个错误,因为它试图执行$ENV_PARAMS_FOR_BRAVO
,就好像它是命令本身一样。当我运行相同的确切命令,将上述变量替换为其内容(result=$(FOO=bar bash bravo.sh)
)时,脚本会按预期工作
在脚本的实际版本中,我需要将更多的变量从alpha
传递到bravo
,因此$ENV_PARAMS_FOR_bravo
变量用于聚合bravo
的精心编制的参数列表。我也不能将它们作为参数传递给bravo
,因为其中许多参数是可选的,并且会改变实际参数bravo
中非可选的参数
上述方法的问题是什么?我如何解决它?您可以
导出变量FOO
,以便对所有调用脚本可见:
#!/usr/bin/bash
export FOO="bar"
result=$(./bravo.sh)
echo $result
> foo is bar
替代解决方案,如果您只希望它bravo.sh
而不是以下所有脚本:
#!/usr/bin/bash
result=$(export FOO="bar"; ./bravo.sh)
echo $result
result2=$(./bravo.sh)
echo $result2
输出将是
> foo is bar
> foo is