Answers:
a; b
总是在第二条命令之后执行第二条命令,而a && b
仅在第一条命令成功的情况下(即仅在第一条命令返回状态0时)才运行第二条命令。
sleep
始终返回状态0,除非被信号杀死,在这种情况下,状态为128 +信号编号。(如果sleep
命令不存在或由于资源不足而无法启动程序,则状态也可以是126或127 ,但是您极不可能遇到这些情况。)
因此,如果睡眠中断,您应该使用;
或&&
根据想要发生的情况进行操作:
sleep 10; echo hello
10秒钟后打印消息(如果sleep
被信号杀死则更少);sleep 10 && echo hello
10秒钟后打印消息,但是如果sleep
被信号杀死则不打印任何消息。您应该假定任何命令都可能由于各种原因而失败,即使确实不可能出现睡眠失败。
( sleep 10 ; echo "hello world" ) &
表示后台睡眠并在睡眠过程后执行回显,但是如果睡眠失败,回显将继续运行, 请参见完整说明
sleep 10 && echo "hello world" &
意味着您需要等到睡眠结束后再回显任何内容,如果回显失败,则该过程将停止,但整个命令也将处于后台。看到完整的解释
结束语
第一种语法是shell脚本,这意味着它将脚本作为列表单独考虑。
第二个选项使用&&表示AND,因此如果在第一个命令失败的情况下使用它,则第二个将不会执行。
这只是处理错误的不同行为。