Bash 理解{}/dev/null\;将find与-exec一起使用时

Bash 理解{}/dev/null\;将find与-exec一起使用时,bash,unix,grep,find,exec,Bash,Unix,Grep,Find,Exec,我试图理解这句话: find $HOME -name "*.c" -exec grep "find this string" {} /dev/null \; 我理解其中的大部分,但我不确定出现在{}之后和之前的/dev/null find查找每个C程序文件,然后对于每个文件,grep查找包含字符串的行。。。然后它是否将所有错误发送到/dev/null 它用于强制grep打印匹配的文件名,仅在没有特定选项的grep中有用。看: $ cat file 1 2 3 $ grep 2 file 2

我试图理解这句话:

find $HOME -name "*.c" -exec grep "find this string" {} /dev/null \;
我理解其中的大部分,但我不确定出现在
{}
之后和
之前的
/dev/null


find
查找每个C程序文件,然后对于每个文件,
grep
查找包含字符串的行。。。然后它是否将所有错误发送到
/dev/null

它用于强制grep打印匹配的文件名,仅在没有特定选项的grep中有用。看:

$ cat file
1
2
3

$ grep 2 file
2

$ grep 2 file /dev/null
file:2
过去需要它来获得输出,但现在使用GNU grep(和其他?)您可以这样做:

$ grep -H 2 file
file:2

您可能需要检查课本上的销售日期;-)

它似乎没有向
/dev/null
发送任何内容,它将它作为第二个参数提供给grep,grep在那里永远也找不到任何内容。事实上,在我看来,它没有任何效果。这很奇怪,因为我在学校的Unix教科书中得到了一个很好的答案和解释。我认为POSIX
grep
对此有一个选项,但是
-l
只是文件名,不是匹配项。教科书应该明确解释为什么
/dev/null
作为参数传递,因为它基本上只用于触发副作用。