Bash:导出的变量未在sh脚本中加载

时间:2019-01-21 14:09:13

标签: bash unix environment-variables

我有以下test.sh脚本:

#!/bin/sh
echo "MY_VARIABLE=$MY_VARIABLE"

好吧,如果我执行以下操作:

export MY_VARIABLE=SOMEVALUE
/bin/bash test.sh

它打印:

MY_VARIABLE=

为什么在test.sh脚本中未读取MY_VARIABLE?

您可以使用以下脚本重现上下文here

touch test.sh
chmod a+x test.sh
echo "#!/bin/sh" >> test.sh
echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh
export MY_VARIABLE=something
/bin/bash test.sh

2 个答案:

答案 0 :(得分:3)

在用于创建上下文的脚本中,该行

echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh

test.sh中创建以下行:

echo MY_VARIABLE=

如果之前未设置MY_VARIABLE$MY_VARIABLE的扩展是在准备上下文的shell中完成的。

如果使用单引号

echo 'echo "MY_VARIABLE=$MY_VARIABLE"' >> test.sh

脚本test.sh包含正确的行

echo "MY_VARIABLE=$MY_VARIABLE"

并按预期打印MY_VARIABLE=something

答案 1 :(得分:0)

一切正常,但是如果您想让父进程保持环境更新,则必须source您的脚本:

source test.sh

否则,更改仅在脚本执行期间生效。

您可以将其视为与采购~/.bashrc文件相同。