如果为空条件行为

use*_*107 4 shell grep bash

有什么区别:

if echo " T " | grep -q " F "; then echo FOUND; else echo NOT; fi
Run Code Online (Sandbox Code Playgroud)

和:

if ""; then echo FOUND; else echo NOT; fi
Run Code Online (Sandbox Code Playgroud)

第一个命令的输出是:

NOT
Run Code Online (Sandbox Code Playgroud)

第二个命令的输出是:

: command not found 
NOT
Run Code Online (Sandbox Code Playgroud)

我认为两者都应该以相同的方式行事。

cha*_*aos 5

: command not found
Run Code Online (Sandbox Code Playgroud)

这意味着找不到在 if 语句中作为条件提供的命令。该命令""只是一个空字符串,因此找不到;没有这样的命令。

根据 bash 的手册页,if 语句的语法应如下所示:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi
Run Code Online (Sandbox Code Playgroud)

列表是一个或多个管道的一个序列分开由所述运营商之一;,&&&,或||,并且任选被一个终止;,&或。

因此,在上面的 if 语句中,执行列表并返回 127 的退出代码,并显示未找到命令的错误。然后将其评估为 false,因此执行 else 块。


您可能想要的是以下内容:

if false; then echo FOUND; else echo NOT; fi
Run Code Online (Sandbox Code Playgroud)

  • @user13107 是的,在 shell 中执行命令后,立即使用 `echo $?` 打印退出状态。这就是 if 子句用来确定是否执行 if 或 else 块的内容。 (2认同)