为什么 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
。