在bash中,两个&符号和一个分号是如何区别的?

如果我想在一行上运行两个单独的命令,我可以这样做:

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"