我不知道如何在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 -c
shell 甚至可以运行。
这是由于参数的双引号引起的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;'