这些命令是什么意思?

San*_*ing 2 linux bash

这些命令的更直接可读的方式是什么?

为什么exit 255exit 1

[ $# -eq 3 ] || { echo error ; exit 255 ; }

grep -q "string" && exit 0
Run Code Online (Sandbox Code Playgroud)

Dal*_*und 5

其他人已经提到这$#是命令行参数的数量,所以我会忽略你问题的那部分。

鉴于cmd1 && cmd2,shell 首先执行cmd1。如果cmd1失败,则整个表达式失败。如果cmd1成功,shell 继续执行cmd2。整个表达式成功,如果两者 cmd1cmd2取得成功。因此,&&运算符是应用于 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||运算符,至少对我来说是令人困惑的,因为你最终会得到一种奇怪的反向逻辑。