这些命令的更直接可读的方式是什么?
为什么exit 255
不exit 1
?
[ $# -eq 3 ] || { echo error ; exit 255 ; }
grep -q "string" && exit 0
Run Code Online (Sandbox Code Playgroud)
其他人已经提到这$#
是命令行参数的数量,所以我会忽略你问题的那部分。
鉴于cmd1 && cmd2
,shell 首先执行cmd1
。如果cmd1
失败,则整个表达式失败。如果cmd1
成功,shell 继续执行cmd2
。整个表达式成功,如果两者 cmd1
并cmd2
取得成功。因此,&&
运算符是应用于 shell 命令的短路布尔值 AND。此运算符的使用可以替换为
if cmd1
then
cmd2
fi
Run Code Online (Sandbox Code Playgroud)
鉴于cmd1 || cmd2
,shell 首先执行cmd1
。如果成功,则整个表达式成功。否则,shell 执行cmd2
并且表达式的成功或失败由 决定cmd2
。简而言之,这是应用于 shell 命令的短路布尔 OR。您可以将此表格替换为
if ! cmd1
then
cmd2
fi
Run Code Online (Sandbox Code Playgroud)
我已经仔细使用了上面的成功/成功和失败/失败的短语。对于 shell 命令,成功定义为进程退出状态为零。失败是任何非零状态。然而,试图从退出状态的角度理解&&
and||
运算符,至少对我来说是令人困惑的,因为你最终会得到一种奇怪的反向逻辑。