使い方{html,php,htm}
としてのみ働くことができるブレース展開非標準の(POSIXに準拠していない)機能で、bash
、ksh
、とzsh
。
ブレース展開が認識されるためには、コマンドラインで引用符で囲まれていない(aの一部)トークンである必要があります。
ブレース展開はに展開複数の引数の手でその場合には、grep
見終わる複数の --include=...
あなたがそれらを個別に合格した場合と同様に、オプションを。
ブレース展開の結果は、(ファイル名展開)グロブの対象であり、落とし穴。
結果として得られる各引数は、引用符で囲まれていないグロビングメタ文字などが含まれている場合、一致するファイル名にさらに展開できます*
。
これは--include=*.html
(たとえば、一致するもののように文字通り名前が付けられたファイルが必要になるなど)のトークンではありそうにありませんが--include=foo.html
、一般的には覚えておく価値があります。
場合はnullglob
、シェルのオプションをオンにすることを起こる(shopt -s nullglob
)とマッチするグロブない何も、引数がされます破棄します。
したがって、完全に堅牢なソリューションの場合は、以下を使用します。
grep -R '--include=*.'{html,php,htm} pattern /some/path
'--include=*.'
単一引用符で囲まれているため、はリテラルとして扱われます。これにより、誤ってグロビング文字として解釈されるのを防ぎます。*
{html,php,htm}
、必要に応じて、引用符で囲まれていないブレース展開[1]
は3つの引数に展開されます。これは{...}
、'...'
トークンの直後に続くため、そのトークンを含みます。
したがって、シェルによる引用の削除後、次の3つの リテラル引数が最終的にに渡されgrep
ます。
--include=*.html
--include=*.php
--include=*.htm
[1]より正確には、引用符で囲まない必要があるのはブレース展開の構文に関連する部分だけであり、リスト要素は引き続き個別に引用される場合があり、ブレース展開後に不要な展開になる可能性のある展開メタ文字が含まれている必要があります。この場合は必要ありませんが、上記は次のように書くことができます
'--include=*.'{'html','php','htm'}