【问题标题】:Bash/sh - difference between && and ;Bash/sh - && 和 ; 之间的区别
【发布时间】:2011-09-03 09:42:49
【问题描述】:

我通常使用; 在一行中组合多个命令,但有些人更喜欢&&。有什么区别吗?例如,cd ~; cd -cd ~ && cd - 似乎做了同样的事情。哪个版本更便携,例如会受到像 Android 的 shell 这样的 bash 子集的支持吗?

【问题讨论】:

    标签: bash shell syntax multiplatform


    【解决方案1】:

    如果上一个命令以; 失败,则第二个命令将运行。

    但是使用&&,第二个不会运行。

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

    【讨论】:

    • 换句话说,它有一个短路行为
    • @peter 哪一个? ; 一个还是&& 一个?还是说两者兼而有之?
    • @Shayan,&&
    • 所以你更愿意运行sudo apt update && sudo apt upgrade而不是sudo apt update; sudo apt upgrade,对吧?
    【解决方案2】:

    我用&&是因为很久以前在附近的电脑上:

    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 * 是安全的... ;)

    【讨论】:

    • 为了更安全,我会使用rm -rf /tnp/test
    • 为了更安全,最好使用rm /tnp/test/ -rf来防止致命的输入missclick
    【解决方案3】:

    cmd1 && cmd2 中,cmd2 仅在cmd1 成功时才会执行(返回 0)。

    cmd1 ; cmd2中,cmd2无论如何都会被执行。

    这两种结构都是符合 POSIX 的 shell 的一部分。

    【讨论】:

      【解决方案4】:

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

      当您需要根据上一个命令是否正常完成而需要采取特定操作时非常有用。

      【讨论】:

      • 注意如果你把&&||结合起来,那么你必须把&&放在前面。否则,如果 either 原始命令或 || 命令成功(以 0 状态退出),则执行 &&
      【解决方案5】:

      ; 分隔的命令将按顺序执行,无论其完成状态如何。

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

      这在 Lists 下的 bash 手册页中有介绍。我希望任何类 Unix 的 shell 都支持这两个运算符,但我并不特别了解 Android shell。

      【讨论】:

      【解决方案6】:

      && 允许条件执行,而; 始终执行第二个命令。

      在例如command1 && command2command2 只会在command1exit 0 终止时执行,表示一切顺利,而在command1 ; command2 中,无论command1 的结果如何,第二个命令都会始终执行。

      【讨论】:

        【解决方案7】:

        && 在 bash 中是逻辑与。 Bash 对逻辑 AND 进行短路评估。这个成语是表达以下内容的一种更简单的方式:

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

        而 ;版本只是:

        
        cmd1
        cmd2
        

        【讨论】:

          猜你喜欢
          • 2022-06-28
          • 1970-01-01
          • 2011-08-09
          • 2015-10-24
          • 1970-01-01
          相关资源
          最近更新 更多