*为什么*在 find/grep 中使用 /dev/null 显示文件名?

Jon*_*han 2 unix grep find

find . -name "*.java" -exec grep "foo" {} \;
Run Code Online (Sandbox Code Playgroud)

这只是打印匹配,没有文件名。

find . -name "*.java" -exec grep "foo" /dev/null {} \;
Run Code Online (Sandbox Code Playgroud)

但这也会打印文件名。

为什么?当 /dev/null 插入混合时,导致文件名打印的 find/grep 机制是什么?

PS - 是的,我知道我可以做“grep -H”

pet*_*ohn 6

如果您既不使用 -h 也不使用 -H 选项,则当多个文件作为参数给出时,grep 将写出文件名。因此,如果您将 /dev/null 作为参数添加到 grep,您将始终拥有多个,因此将始终写入文件名。但是,是的,使用 ? grep -H是始终写入文件名的最安全方法。