将变量内的变量传递给嵌套脚本

时间:2019-05-23 14:55:50

标签: 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就像命令本身一样。当我运行相同的确切命令,将上面的变量替换为其内容(result=$(FOO=bar bash bravo.sh))时,脚本将按预期工作。

在脚本的实际版本中,我需要将更多变量从bravo传递到alpha,因此$ENV_PARAMS_FOR_BRAVO变量旨在作为策展人的集合bravo的参数列表。我也无法将它们作为参数传递给bravo,因为其中许多是可选参数,并且会将真实的参数bravo转换为非可选参数。

上述方法有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:1)

您可以export变量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