Answers:
的*
(星形,星号或)是(通常)由shell解释发出命令之前,一个特殊字符。(通常)将其扩展为所有文件名(带前导点的文件名除外)。有关更多信息,请参见有关模式匹配的bash手册。
如果用引号引起来,则星号不会被外壳解释,并逐字给出命令。
举例说明。引用一:
grep "string" . -r --include "*.pl"
这里grep
将接收--include
带有参数的选项*.pl
。即以该*
字符为第一个字符的4个字符串。什么grep
与字符串所做的是完全由grep
。在这种情况下--include
,仅考虑与模式匹配的文件*.pl
。
幕后的AFAIK gnu grep使用与gnu bash相同的模式来匹配lib。
未引用的是:
grep "string" . -r --include *.pl
在这里,shell首先将模式扩展到*.pl
以结尾的所有文件名.pl
。假设有文件foo.pl
,bar.pl
和baz.pl
。扩展后的命令行如下所示:
grep "string" . -r --include foo.pl bar.pl baz.pl
这里grep
将接收--include
带有参数的选项foo.pl
,后跟选项bar.pl
和baz.pl
。--include foo.pl
表示只考虑与模式匹配的文件foo.pl
。由于模式中没有通配符,因此唯一匹配的文件将是名为的文件foo.pl
。
grep 的选项bar.pl
和baz.pl
方法也将在这些文件中搜索,但由于它们与模式不匹配,foo.pl
因此将被忽略。
grep -r
看起来前后不一致,但从来没有注意到,只是当我使用了*
。
grep
; 它在外壳中。grep
从来没有看到报价。