没有安静选项的条件 grep

6 grep bash

我一直认为有条件-q使用时必须使用quiet ( ) 选项grep。但是重新阅读man页面似乎没有它应该可以工作。

因此,如果您想打印匹配项并在有条件的情况下使用它,您可以做类似的事情吗?

grep PATTERN FILE && do_something_else
Run Code Online (Sandbox Code Playgroud)

唯一让我不确定的是退出状态似乎略有不同。

-q,

  • grep 将“如果找到任何匹配项,即使检测到错误也会立即以零状态退出”。

没有 -q

  • “如果找到选定的行,退出状态为 0,如果未找到,则退出状态为1。如果 发生错误,退出状态为 2 ”。

但我想不出一个差异会变得明显的例子?

ter*_*don 5

下面是一个例子:

$ echo "foo" > file
$ grep foo file wrongfile; echo "Exit status: $?"
file:foo
grep: wrongfile: No such file or directory
Exit status: 2
$ grep -q foo file wrongfile;  echo "Exit status: $?"
Exit status: 0
Run Code Online (Sandbox Code Playgroud)

因此,我们有一个名为的文件file,其中包含字符串foo. 当我跑grep-qfile和不存在的wrongfile,因为file含有匹配,grep与退出0尽管“没有这样的文件”的错误状态。