Bash / sh – &&和;之间的区别

我通常使用; 在一条线上结合多个命令,但有些人更喜欢&& 。 有什么区别吗? 例如, cd ~; cd - cd ~; cd -cd ~ && cd -似乎做同样的事情。 什么版本更具可移植性,比如Android的shell等bash子集支持?

如果以前的命令失败, 第二个将运行。

但用&&第二个不会运行。

这是操作之间的“懒”逻辑“AND”操作数。

我很久以前在附近的电脑上使用&&

 root# pwd / root# cd /tnp/test; rm -rf * cd: /tnp/test: No such file or directory ... ... and after a while ... ... ^C 

但没有帮助…;)

cd /tnp/test && rm -rf *是安全的…;)

cmd1 && cmd2 ,只有cmd1成功(返回0)才会执行cmd2

cmd1 ; cmd2 cmd1 ; cmd2cmd2在任何情况下都执行。

这两个构造都是符合POSIX标准的shell的一部分。

命令分开; 无论其完成状态如何都按顺序执行。

使用&& ,只有第一个命令成功完成(返回退出状态0),才会执行第二个命令。

这在Lists下的bash manpage中有介绍。 我期望任何类Unix的shell都支持这两种操作符,但我不知道具体的Android shell。

&&表示如果先前退出状态为0,则执行下一个命令。相反,使用|| 即如果先前的命令以不等于0的状态退出则执行; 总是执行。

当你需要采取一个特定的行动取决于前面的命令是否完成OK是非常有用的。

&&允许条件执行while ; 总是有第二个命令正在执行。

在例如command1 && command2command2将只在command1exit 0结束时执行,信号一切正常,而在command1 ; command2 command1 ; command2不pipecommand1的结果如何,第二个命令都会被执行。

&&是逻辑与在bash中。 Bash对逻辑“与”进行短路评估。 这个成语是一个简单的expression方式:

 cmd1;rc=$? if [ $rc -eq 0 ]; then cmd2 fi 

而; 版本仅仅是:

 cmd1 cmd2