终端 - 即使找不到匹配项,为什么grep的exit命令为0?

时间:2014-12-01 06:02:42

标签: shell terminal grep exit-code

我有这个命令:

grep -E '^nothing' List.txt | echo $?

这里grep与任何东西都不匹配,我只是输出它的退出代码。根据grep的文档:

  

如果选择了一行,通常退出状态为0,如果没有行则退出1   被选中,如果发生错误则为2。但是,如果-q或    - 使用--quiet或--silent选项并选择一行,即使发生错误,退出状态也为0。其他grep实现可能   出错时退出状态大于2。

可是:

prompt:user$ grep -E '^nothing' List.txt | echo $?
0
prompt:user$

但是,即使匹配不存在,为什么我得到0作为输出,我不应该得到预期的1退出代码吗?

1 个答案:

答案 0 :(得分:3)

这是问题所在:

grep -E '^nothing' List.txt | echo $?

通过使用单|,您将grep的输出发送到echo,它将始终打印上一个命令的退出状态,无论是否找到模式,该输出始终为0。< / p>

您可以使用grep -q

grep -qE '^nothing' List.txt

根据man grep

 -q, --quiet, --silent
         Quiet mode: suppress normal output.  grep will only search a file until a match
         has been found, making searches potentially less expensive.