![grep マイナス数値が機能しない](https://rvso.com/image/1568345/grep%20%E3%83%9E%E3%82%A4%E3%83%8A%E3%82%B9%E6%95%B0%E5%80%A4%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84.png)
を含むディレクトリ内のすべてのファイルを検索したいです-2
。
ls | grep "-2"
返品の使用usage: grep...
二重引用符の代わりに一重引用符を使用すると同じ結果が返されます。また、引用符をまったく使用しない場合も同様です。一方、他のものを検索すると、一致するファイル名が正しく返されます。
私の記憶によれば、-
正規表現の特殊文字ではありません。
名前を持つファイルを検索するという特定の問題に焦点を当てないでください。主に、grep がなぜこのように動作するのかを理解したいのです。
macOS 10.13 で bash を使用する
答え1
これは、引用符で囲まれているにもかかわらず、-2 をコマンド ライン パラメーターとして解釈しているようなものです。
grep
知らないパラメータが引用符で囲まれているかどうか。
何かを実行する前に、シェル自体によって多くの解析手順が実行されます1>
–リダイレクトが適用され、$
変数が展開され、*
ワイルドカードが展開され、|
パイプラインが個別のコマンドのセットに分割され、各コマンドが単語の配列に分割されます。
したがって、、、、あるいは を実行してgrep -2
も、grep '-2'
シェルはそれを同じパラメータのリストとして認識します: { 、}。これがexecv()システムコールに渡されるもので、grep \-2
x=-2; grep $x
grep
-2
グレップargv[]
プログラムは、元の引用に関係なく、配列で受け取ります。
1 CreateProcess() のコマンドラインが単一の文字列であるWindowsでも、ほとんどのポートはグレップC ランタイム ライブラリは初期化時に同じ引数分割を実行するため、この動作は引き続き発生します。