bash -c 子 shell 中的变量解析

bash -c 子 shell 中的变量解析

如何解析“bash -c”内子 shell 中的变量?

下面,第二个子 shell(内部带有“echo”的子 shell)正确解析。第一个子 shell——带有“touch”——没有。

/bin/bash -c "\
A=/tmp/foo; \
echo $( touch \$A;  ); \
echo $( echo in subshell, \$A; ); \
"

答案1

原因很简单,因为子 shell 是从当前 shell 计算的,而不是从子 shell 计算的。转义$()将使其按您的预期工作:

/bin/bash -c "\
A=/tmp/foo; \
echo \$( touch \$A;  ); \
echo \$( echo in subshell, \$A; ); \
"

答案2

因为您使用双引号,所以 Bash 首先评估整个字符串,然后执行它。

将第一行替换为/bin/bash -c echo “\,您将看到以下是bash -c尝试执行的代码。

/bin/bash -c  echo "\


touch \$A;  ); echo $( echo in subshell, \$A; ); "
echo in subshell, \$A; ); "
touch \$A;  ); echo $( echo in subshell, \$A; ); 
touch \$A;  
echo in subshell, \$A; ); 
echo in subshell, \$A; 

请改用单引号。

相关内容