2017-05-16 2 views
0

Iはfunction1の使用を見つけるためgrep -F -e "function1" --include=*.{cpp,c} . -r -nを使用するが、その後、私は--includeからcを除去するので、私はそれをスピードアップする可能性が実現しましたしかし、それは動作しません。唯一つのエントリがある場合はgrep --include = *。{CPP、CC、CXX}が動作しない

なぜですか?

これは動作しません - >grep -F -e "function1" --include=*.{cpp} . -r -n

それが実行されますが、何も返しません。 2番目の項目、つまり--include=*.{cpp,dsafjlsadfsaldf}を追加すると、それは機能します。

+0

これはシェル機能であり、 'grep'に特有のものではありません。あなたはすでに[gnu]というタグを付けているので、[bash]を追加しました。 –

+1

'*。{cpp、c}'は '* .cpp * .c'に展開され、' *。{cpp} 'は '*。{cpp}'です。 – alvits

答えて

2

をあなたがシェルの「ブレース展開」に依存しています特徴。 Bashのマニュアルを引用すると、

A正しく形成されたブレース展開は引用符で囲まれていない開閉括弧、と少なくとも一つの引用符で囲まれていないコンマまたは有効なシーケンス式が含まれている必要があります。

カンマなしでは、テキストは中括弧拡張の対象外です。

1

は観察:

$ echo {a,b} 
a b 
$ echo {a} 
{a} 

を換言すれば、括弧内の2つの要素がある場合ブレース膨張のみ働きます。要素が1つしかない場合は、中括弧を使用しないでください。

再び

が、特定の宛先オプションを使用している:

$ echo --include=*.{cpp,c} 
--include=*.cpp --include=*.c 
$ echo --include=*.{cpp} 
--include=*.{cpp} 

は、後者が正しく動作するために取得するには、かっこを削除します。

$ echo --include=*.cpp 
--include=*.cpp 
関連する問題