为什么bash需要&&在一行上回显一个变量?


12

为什么 SOMETHING=1 && echo $SOMETHING需要&&退货1
为什么不SOMETHING=1 echo $SOMETHING退货1


7
羞辱任何拒绝您问题的人,尤其是在不留下建设性反馈的情况下。这是一个有效的问题,bash进行单词/参数/变量/波浪线扩展和命令执行的顺序非常棘手。我给你+1。
Spiff 2015年


从技术上讲,“ echo 1”返回0,并且输出为1 ...也就是说,“ echo”以状态“ 0”退出,并显示以输出参数。措辞“返回1”对我而言意味着“退出状态”,而不是“输出”,乍一看有点令人困惑。
迈克尔,2015年

Answers:


8

因为bash在解释变量赋值语句之前会进行变量扩展。因此,由于先前未定义SOMETHING,因此您的命令将变为…

SOMETHING=1 echo ''

…然后被执行。


变量扩展与变量替换相同吗?
2015年

1
@JoelL:正确
Gordon Davisson

0

同时导出和回显

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:~# 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.