deathangel908 Asked: 2018-05-14 01:17:17 +0800 CST2018-05-14 01:17:17 +0800 CST 2018-05-14 01:17:17 +0800 CST 如何在 bash -c 中声明一个变量 772 我不知道如何在bash -c命令中声明变量。 bash -c "var=3; echo $var" bash 2 个回答 Voted Best Answer Kusalananda 2018-05-14T01:30:54+08:002018-05-14T01:30:54+08:00 让我们看看这里实际发生了什么: $ set -x $ bash -c "var=3; echo $var" + bash -c 'var=3; echo ' set -x您可以跟踪实际执行了哪些命令(用于关闭set +x此功能)。在这里,我们看到变量在子shell 甚至运行之前$var就被扩展为一个空字符串。bash -c 这是由于参数的双引号引起的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 Ignacio Vazquez-Abrams 2018-05-14T01:18:30+08:002018-05-14T01:18:30+08:00 因为$?and$a在调用 shell 中被评估。 bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'
让我们看看这里实际发生了什么:
set -x
您可以跟踪实际执行了哪些命令(用于关闭set +x
此功能)。在这里,我们看到变量在子shell 甚至运行之前$var
就被扩展为一个空字符串。bash -c
这是由于参数的双引号引起的
bash -c
,这将提示当前 shell 在字符串中进行变量扩展。由于var
变量在当前 shell 中未定义或为空,因此它的扩展是空字符串。要保护字符串免受 shell 的“干扰”,请使用单引号:
...或逃避
$
(IMO不太好):因为
$?
and$a
在调用 shell 中被评估。