“命令&&命令”和“命令;命令”有什么区别

54 linux bash shell command-line ubuntu

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

如果我使用,会有什么不同apt-get update; apt-get upgrade
我不是要求这种特定用法,但总的来说这两种用法之间有什么区别?

Eta*_*ner 92

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

在 中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
Run Code Online (Sandbox Code Playgroud)

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

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
Run Code Online (Sandbox Code Playgroud)


std*_*err 35

句法

command1 && command2
Run Code Online (Sandbox Code Playgroud)

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

command1 ; command2
Run Code Online (Sandbox Code Playgroud)

这两个命令1命令2时将忽略执行。分号允许您在一行中键入多个命令。

相关

command1 || command2
Run Code Online (Sandbox Code Playgroud)

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


例子

&& 操作员:

$ rm /tmp/filename && echo "File deleted"
Run Code Online (Sandbox Code Playgroud)

; 操作员:

$ echo "foo" ; echo "bar"
Run Code Online (Sandbox Code Playgroud)

|| 操作员:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"
Run Code Online (Sandbox Code Playgroud)

外部链接

  1. Linuxtopia.org
  2. 网站