基于命令的 if 语句

Lum*_*ify 2 exit-status

我发现这种执行if命令的方法:

$if echo test | grep st ; then echo yes ; fi ; echo $?
test
yes
0
Run Code Online (Sandbox Code Playgroud)

看起来不错。让我们尝试一下不匹配:

$if echo test | grep 123 ; then echo yes ; fi ; echo $?
0
Run Code Online (Sandbox Code Playgroud)

那是不对的。该if语句运行正常,但返回零退出代码。

有人能为我解释一下吗?

Ste*_*itt 6

$?afterif块包含语句的退出状态if。该标准规定

\n\n
\n

命令的退出状态应是已执行的或复合列表if的退出状态,如果没有执行,则为零。thenelse

\n
\n\n

在第一种情况下,您\xe2\x80\x99将看到命令的退出状态echo yes。第二种情况,thenorelse块中没有执行任何命令,因此退出状态为0。

\n