如果我想在一行上运行两个单独的命令,我可以这样做:
cd /home; ls -al
或这个:
cd /home && ls -al
我得到了同样的结果。 但是,这两种方法在后台发生了什么? 他们之间有什么function差异?
The ;
只是将一个命令与另一个命令分开。 &&
表示只有在前一次成功时才运行以下命令
cd /home; ls -al
这将cd /home
,即使cd
命令失败( /home
不存在,您没有权限遍历它等),它将运行ls -al
。
cd /home && ls -al
如果cd /home
成功,这将只运行ls -al
。
a && b
如果一个返回零退出代码,则执行b 。
a || b
如果返回一个非零的退出码,则执行b 。
a ; b
a被执行,然后b被执行。
cd /fakedir; ls -al
在当前目录中运行ls
,因为cd /fakedir
将会失败,并且shell将忽略不为零的退出状态。
cd /fakedir && ls -al
由于&&
操作符只有在前一个命令正常退出(状态为零)的情况下才会继续,因此不会执行ls
操作。
还有其他的运营商,比如&
将会有一个进程背景。 虽然通常放在命令的末尾,但它可以放在链条的中间。
你也可以像一个if..then..else
一样if..then..else
它们连接在一起,以便链接命令逻辑。
例:
ls file.ext && echo "file exists" || echo "file does not exist"