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

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

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

相关内容