如果为空条件行为

如果为空条件行为

有什么区别:

if echo " T " | grep -q " F "; then echo FOUND; else echo NOT; fi

和:

if ""; then echo FOUND; else echo NOT; fi

第一个命令的输出是:

NOT

第二个命令的输出是:

: command not found 
NOT

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

答案1

: command not found

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

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

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

A列表是由运算符 ;、&、&& 或 || 之一分隔的一个或多个管道的序列,并且可以选择以 ;、& 或 之一终止。

因此,在上面的 if 语句中,执行了列表,返回了退出代码 127,并抛出一条错误,表明未找到该命令。然后该值被评估为 false,因此执行 else 块。


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

if false; then echo FOUND; else echo NOT; fi

相关内容