シェル拡張が発生しませんでした。

シェル拡張が発生しませんでした。

これら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

おすすめ記事