为什么当我调用 bash -c 时 source 不起作用

Sal*_*ami 3 shell bash quoting

我想运行一个命令来获取脚本来处理一些环境。变量,而不是在我当前的 shell 中找到它们。

测试环境

export test=1
Run Code Online (Sandbox Code Playgroud)

这些命令都没有回显 env。多变的:

a) 这不应该工作吗?我不是只是在新 shell 中执行这些命令并返回输出吗?

$ bash -c "source test.env && echo $test"
Run Code Online (Sandbox Code Playgroud)

b) 在这里我执行 test.env 并尝试使用 exec 在同一进程中运行 echo $test。

$ bash -c "./test.env && exec echo $test"
Run Code Online (Sandbox Code Playgroud)

c) 最后我只是尝试了这个,因为它是一个可能的排列。但它将 test.env 和 echo 命令作为单独的进程执行。

$ bash -c "./test.env && echo $test"
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它在 env. 变量是在执行第二个命令之前获取的吗?

cuo*_*glm 6

你必须$在你的第一个命令中转义美元符号,否则bash会在你的命令执行之前扩展它:

$ bash -c "source test.env && echo \$test"
Run Code Online (Sandbox Code Playgroud)

或者你应该使用单引号而不是双引号:

$ bash -c 'source test.env && echo $test'
Run Code Online (Sandbox Code Playgroud)