“ command && command”和“ command”有什么区别?命令”


49

我在Ubuntu的“ command && command”和“ command; command”上看到了这两种用法,
例如apt-get update && apt-get upgrade

如果使用,会有什么不同apt-get update; apt-get upgrade
我不是在要求这种特定用法,但是通常这两种用法有什么区别?


2
Win命令行和批处理具有相同的功能:& (simple sequencing), && (conditional AND) and || (conditional OR)
卡兰

5
另请参见:Bash参考手册–命令列表。通常,在文档中找不到任何内容。如果您对特定语法元素有疑问,那真的值得一看。
slhck

1
@Karan为了完整性,bash(linux / Ubuntu)||也是如此。
2013年

Answers:


88

&&是逻辑运算符。;简单的排序。

在中cmd1 && cmd2,仅当cmd1退出并返回成功代码时,才会运行cmd2。

而在中cmd1; cmd2,无论cmd1的退出状态如何,cmd2都将运行(假设您没有将shell设置为在脚本或其他所有失败时退出)。

与此相关的是,使用时cmd1 || cmd2,使用||'OR'逻辑运算符,只有在cmd1失败(返回非零退出代码)时,才运行cmd2。

有时在脚本中使用这些逻辑运算符代替基本的if语句。例如,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

...可以更简洁地实现:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"

我发现它有点谬误,因为根据我的理解,成功的返回码表示0,当转换为布尔值时,将给出逻辑错误。因此,按照大多数语言中使用的麦卡锡评估哲学,它应该立即返回false,而不是评估(运行)下一条语句。
德拉

33

句法

command1 && command2

当且仅当command1返回退出状态为零( true)时,才会执行 command2。换句话说,运行command1,如果成功,则运行command2

command1 ; command2

这两个命令1命令2时将忽略执行。分号使您可以在一行上键入许多命令。

相关

command1 || command2

命令2,如果执行,且仅当命令1返回一个非零退出状态。换句话说,command1成功运行或运行command2


&& 操作员:

$ rm /tmp/filename && echo "File deleted"

; 操作员:

$ echo "foo" ; echo "bar"

|| 操作员:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

外部链接

  1. Linuxtopia.org
  2. Tldp.org
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.