“ grep -r foo *”与“ grep -r foo”。


10

使用grep -r时,您可以使用*或。搜索所有文件。似乎返回了相同的东西,但是真的一样吗?

假设我搜索“ foo”,那么我可以写

grep -r foo *

要么

grep -r foo .

有人会尝试解释两者之间的区别吗?和*?

Answers:


15

grep -r foo *不会在隐藏文件或目录中查找匹配项,还会*被shell扩展,因此当当前目录中有很多条目时,您可能会遇到一个参数列表太长的错误,或者如果其他错误或不当行为,一些文件或目录的名称以连字符开头。

调用grep -r foo .没有以上缺陷

更新:

另一个区别:grep的手册页(@ fedora17)说:

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

在空目录中执行此命令时,也会有所不同:

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$

4

如果使用星号,则无法匹配名称以点开头的目录中的文件,例如.cache

更新:

这是因为*会在调用之前由shell进行扩展grep,因此它会收到一个名称列表,而不是单个目录名称(对于当前.)。方式壳扩大图案的可与外壳参数来定制(作为nullglobnocaseglob或其他bash的选择),或为环境变量(如LANGLC_ALL

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.