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