为什么当没有匹配时 grep 也会打印?

为什么当没有匹配时 grep 也会打印?
$ ps ax | grep 6557
#=> 6582 s003  S+     0:00.01 grep 6557

但是使用活动监视器快速检查,没有 pid 为 6557 的进程。并且网上的所有内容都说当没有匹配时 grep 应该返回 0。

答案1

比赛如下:

$ ps ax | grep 6557
6582 s003  S+     0:00.01 grep 6557
                               ^^^^ (found it!)

grep正在检查行中的所有内容,包括命令和参数,并且6557是您给出的参数grep,因此它会找到自己的进程。

更严格的正则表达式可以修复这种特殊情况: ^表示行的开始,并\ \*匹配任意数量的前导空格,因此这只会在行的最开头找到匹配项:

$ ps ax | grep ^\ \*6557

相关内容