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