Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将变量内的变量传递给嵌套脚本_Bash - Fatal编程技术网

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