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


0
$ ps ax | grep 6557
#=> 6582 s003  S+     0:00.01 grep 6557

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


执行此操作时,ps会列出所有进程,包括grep命令,因此它会匹配自身。它应匹配一次。
MikeP

Answers:


6

这是比赛:

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

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

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

$ ps ax | grep ^\ \*6557

输出ps ax通常以空格开头。
choroba

@choroba所以它确实如此。(而且不能保证只有一个。) ^\ \*6557可读性稍差。
怪异
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.