これら2つのコマンドが同じ理由は何ですか(または私が得た結果に応じて同じように見える場合)。最初のコマンドは*
glob演算子として扱われるため、うまくいかないと思いましたが、通常は渡され、grep
正規表現パターンとして解釈されます。
git diff master | grep \\+.*TODO
git diff master | grep \\+.\*TODO
ベストアンサー1
ファイル名globは、現在のディレクトリに一致するファイルがある場合にのみ拡張されます。それ以外の場合(nullglob
またはfailglob
シェルオプションを除く)、そのまま渡されます。だから:
$ echo \\+.*TODO
\+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO
+TODO
しかし、
$ touch '\+.abcTODO'
$ echo \\+.*TODO
\+.abcTODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.*TODO
$ printf '+foo\n+TODO\n+bar' | grep \\+.\*TODO
+TODO