使用'&&'执行命令的过程

时间:2016-11-30 08:11:15

标签: bash shell variables ampersand

在bash中执行var=foo && echo $var

结果将是:foo

这是否意味着在$var执行后var=foo展开了? 我想了解这个过程。

3 个答案:

答案 0 :(得分:1)

请参阅bash manual说明:

  

AND和OR列表是由一个或多个管道分隔的序列   和&&和||分别控制运营商。 AND和OR列表   使用左关联性执行。 AND列表的格式为

       command1 && command2
     当且仅当command1返回退出状态时,才执行

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