【问题标题】:What is the difference between double-ampersand (&&) and semicolon (;) in Linux Bash?Linux Bash 中的双与号 (&&) 和分号 (;) 有什么区别?
【发布时间】:2014-10-29 10:37:42
【问题描述】:

LinuxBash中的和号和分号有什么区别?

例如,

$ command1 && command2

$ command1; command2

【问题讨论】:

  • 我在这里回答了这个问题:superuser.com/a/619019/107862
  • 关于题外话,上次查了一下,bash 还是一门编程语言,但我之前错了,可能是干果糖。
  • 是的,如果您问的是关于特定行为或做某件事的正确方法的问题,那肯定会成为话题。这属于“关于语言语法的问题”的灰色类别,就我而言,这不是一个“编程”问题。
  • bash 在某些方面是干的,在某些方面是甜的。在一天结束时,它非常令人愉快且易于消化。但是,它不能轻易从婴儿身上偷走。

标签: linux bash


【解决方案1】:

前者是使用短路评估的简单逻辑AND,后者只是简单地分隔两个命令。

实际发生的情况是,当第一个程序返回一个非零退出代码时,整个AND 被评估为FALSE,第二个命令将不会被执行。后者只是按顺序执行它们。

【讨论】:

    【解决方案2】:

    command1 && command2

    command1 && command2 执行 command2 如果(且仅当)command1 执行成功结束。在 Unix 术语中,这意味着 退出代码 / 返回代码 等于 0。

    command1;命令2

    command1; command2 在执行command1 之后依次执行command2。命令是否成功并不重要。

    【讨论】:

      【解决方案3】:

      && 运算符是布尔 AND 运算符:如果左侧返回非零退出状态,则运算符返回该状态并且不计算右侧(短路),否则计算右侧side 并返回其退出状态。这通常用于确保 command2 仅在 command1 成功运行时运行。

      ; 标记只是分隔命令,因此无论第一个命令是否成功,它都会运行第二个命令。

      【讨论】:

      • 在 bash 中双 & 符号 && 与单 & 符号 & 不同吗?
      • @CharlieParker & 导致命令在后台运行,所以是的。 “在后台运行”与“仅在另一个成功时运行下一个命令”非常不同。
      • command2 只会运行 command1 返回 zero 退出状态,表示成功完成..
      • ; 是否还在等待第一个命令完成?
      • @rfii 是的,但是它执行第二个命令而不考虑第一个命令是否成功。 a;b 表示“运行 a 然后运行 ​​b”。 a&&b 表示“运行 a,然后仅在 a 成功时运行 b。”
      猜你喜欢
      • 2021-08-29
      相关资源
      最近更新 更多