在bash中执行var=foo && echo $var
结果将是:foo
这是否意味着在$var
执行后var=foo
展开了?
我想了解这个过程。
答案 0 :(得分:1)
请参阅bash manual说明:
AND和OR列表是由一个或多个管道分隔的序列 和&&和||分别控制运营商。 AND和OR列表 使用左关联性执行。 AND列表的格式为
当且仅当command1返回退出状态时,才执行command1 && command2
command2 为零。
(强调我的)
这意味着只有在分配操作(echo $var
)成功时才会执行var=foo
。
相当于:
var=foo
if [[ $? -eq 0 ]]; then
echo $var
fi
答案 1 :(得分:0)
bash的工作方式与C编程语言的工作密切相关。
error: request for member ‘x’ in something not a structure or union|
error: request for member ‘y’ in something not a structure or union|
短路(因为它在C中)。和C一样,&&
右侧的参数是 not ,直到左侧评估完成为止。 (在C语言中我们说&&
是序列点。)
所以&&
仅 展开一次(i)echo $var
进行评估,以及(ii)是否评估为强制为0的值(表示成功)。
答案 2 :(得分:0)
是的,确实如此。通常,以下两个命令的组合:
New-AzureRmVM
表示如果cmd1 && cmd2
的执行成功,则执行cmd2
。