这些命令的更直接可读的方式是什么?
为什么exit 255
又不呢exit 1
?
[ $# -eq 3 ] || { echo error ; exit 255 ; }
grep -q "string" && exit 0
答案1
其他人已经提到这$#
是命令行参数的数量,所以我将忽略你问题的这一部分。
给定cmd1 && cmd2
,shell首先执行cmd1
。如果cmd1
失败,则整个表达式失败。如果cmd1
成功,shell 将继续执行cmd2
。整个表达式成功,如果两个都 cmd1
并cmd2
成功。因此,该&&
运算符是应用于 shell 命令的短路布尔 AND。该运算符的使用可以替换为
if cmd1
then
cmd2
fi
给定cmd1 || cmd2
,shell首先执行cmd1
。如果成功,则整个表达式成功。否则,shell 将执行cmd2
,并且表达式的成功或失败由 确定cmd2
。简而言之,这是应用于 shell 命令的短路布尔 OR。您可以将此表格替换为
if ! cmd1
then
cmd2
fi
我仔细地使用了这些短语成功了/成功和失败的/失败多于。对于 shell 命令来说,成功定义为进程退出状态为零。失败是任何非零状态。然而,至少对我来说,尝试从退出状态来理解&&
and运算符是令人困惑的,因为你最终会得到一种奇怪的颠倒逻辑。||
答案2
实际上,这非常简单。
该脚本检查它是否恰好获得 3 个参数,即这[ $# -eq 3 ]
部分。如果没有,则该{ echo error ; exit 255 ; }
部分将被执行。退出代码255有特殊含义,它的意思是“退出状态超出范围”看这里。我认为这里有点误用,但有可能。
答案3
$#是个参数数量到外壳。所以,第一行说“如果没有 3 个参数则退出”,因为右边的部分(在||) 仅当左侧部分不为 true 时才执行。||是符合逻辑的或者。
255作为返回码可以是任意的。
脚本将返回0,如果输入中包含单词“string”。
这有帮助吗?
答案4
如果输入中包含“string”,则带有命令的行grep
执行此操作exit 0
,否则退出代码将为 1。更明确的方法是:
grep -q "string"
if [ $? -eq 0 ]
then
exit 0
else
exit 1
fi