使用{html,php,htm}
只能作为工作括号扩展,这是一个非标准的(不是POSIX兼容)功能bash
,ksh
和zsh
。
要识别括号扩展,它必须是命令行上未加引号的(一部分)令牌。
大括号扩展会扩展为多个参数,因此在手头的情况下grep
最终会看到多个 --include=...
选项,就像您单独传递它们一样。
大括号扩展的结果易受globbing(文件名扩展)的影响,该陷阱有以下缺陷:
因此,对于完全健壮的解决方案,请使用以下命令:
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'
由于被单引号引起来,因此被视为文字。这样可以防止无意中将其解释为通配符。*
{html,php,htm}
,-必要- 未引号的括号扩展[1]
,扩展为3个参数,由于{...}
直接跟随该'...'
令牌,因此包含该令牌。
因此,在shell删除引号之后,以下三个 文字参数最终传递给grep
:
--include=*.html
--include=*.php
--include=*.htm
[1]更准确地说,只有大括号扩展中与语法相关的部分必须不加引号,列表元素仍可以单独加引号,并且如果它们包含通配元字符,则它们可能在大括号扩展后导致不必要的通配;虽然在这种情况下不是必需的,但以上内容可以写为
'--include=*.'{'html','php','htm'}