我有这个命令:
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退出代码吗?
答案 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.