![为什么 bash 需要 && 来在一行上显示一个变量?](https://linux22.com/image/1449014/%E4%B8%BA%E4%BB%80%E4%B9%88%20bash%20%E9%9C%80%E8%A6%81%20%26%26%20%E6%9D%A5%E5%9C%A8%E4%B8%80%E8%A1%8C%E4%B8%8A%E6%98%BE%E7%A4%BA%E4%B8%80%E4%B8%AA%E5%8F%98%E9%87%8F%EF%BC%9F.png)
为什么 SOMETHING=1 && echo $SOMETHING
需要&&
返回1
为什么不SOMETHING=1 echo $SOMETHING
返回1
答案1
因为 bash 在解释变量赋值语句之前会进行变量扩展。因此,由于之前未定义 SOMETHING,因此您的命令变为...
SOMETHING=1 echo ''
...然后被执行。
答案2
同时导出和回显
root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# echo $SOMETHING
1
root@kali:~# unset SOMETHING
root@kali:~# echo $SOMETHING
root@kali:~# echo ${SOMETHING=1}
1
root@kali:~#
另一个更愚蠢的例子 xD
root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~#
答案3
您需要稍后(在赋值之后)评估变量。例如,使用
SOMETHING=1 eval 'echo $SOMETHING'
以防止传播SOMETHING
。