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 ; cmd2
, cmd2
在任何情况下都执行。
这两个构造都是符合POSIX标准的shell的一部分。
命令分开;
无论其完成状态如何都按顺序执行。
使用&&
,只有第一个命令成功完成(返回退出状态0),才会执行第二个命令。
这在Lists
下的bash manpage中有介绍。 我期望任何类Unix的shell都支持这两种操作符,但我不知道具体的Android shell。
&&
表示如果先前退出状态为0,则执行下一个命令。相反,使用||
即如果先前的命令以不等于0的状态退出则执行;
总是执行。
当你需要采取一个特定的行动取决于前面的命令是否完成OK是非常有用的。
&&
允许条件执行while ;
总是有第二个命令正在执行。
在例如command1 && command2
, command2
将只在command1
以exit 0
结束时执行,信号一切正常,而在command1 ; command2
command1 ; command2
不pipecommand1
的结果如何,第二个命令都会被执行。
&&是逻辑与在bash中。 Bash对逻辑“与”进行短路评估。 这个成语是一个简单的expression方式:
cmd1;rc=$? if [ $rc -eq 0 ]; then cmd2 fi
而; 版本仅仅是:
cmd1 cmd2