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)