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

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

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

如果我使用会有什么不同apt-get update; apt-get upgrade
我不是在问这个特定的用法,但一般来说,这两种用法有什么区别?

答案1

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

在 中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"

答案2

句法

command1 && command2

命令2command1当且仅当返回退出状态为零时才执行(真的)。换句话说,运行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 网站
  2. Tldp.org

相关内容