如何在 bash -c 中声明变量

如何在 bash -c 中声明变量

我不知道如何在bash -c命令内声明变量。

bash -c "var=3; echo $var"

答案1

让我们看看这里实际发生了什么:

$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '

set -x可以跟踪实际执行的命令(使用set +x将其关闭)。这里我们看到$var变量被扩展为一个空字符串bash -cshell 甚至可以运行。

这是由于参数的双引号引起的bash -c,这将提示当前 shell 在字符串内进行变量扩展。由于该var变量在当前 shell 中未定义或为空,因此它的扩展是空字符串。

要保护字符串免受 shell 的“干扰”,请使用单引号:

$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3

...或者逃避$(IMO 不太好):

$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3

答案2

因为$?$a是在调用 shell 中计算的。

bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'

相关内容