假设我有脚本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
转换为非可选参数。
上述方法有什么问题,我该如何解决?
答案 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