|(バー) を \ (バックスラッシュ) と間違えました
locate abcdef \ grep 2
このような。次に、bash を開始して、名前に「2」を含むすべてのファイルを検索します。
なぜこれが起こるのですか?
あなたのコマンド:
locate abcdef \ grep 2
locateつまり、コマンド\ grep 2の引数として残りのテキストを作成したため、コマンドのlocate処理を開始しましlocateた(grepはまったく実行されませんでした)。
バックスラッシュは、シェルによって引数の区切り文字として解釈されないように、スペースをエスケープしただけです。したがって、今呼び出したのは、locate3 つの引数を持つコマンドでした。最初の引数はabcdef、2 番目の引数は grep(先行スペース付き)、3 番目の引数は2です。
locateそのような場合、少なくとも 1 つの検索語が含まれるすべてのファイルが一覧表示されます。
コマンドは、ファイル名に 2 が含まれるシステム内のすべてのファイルを検索します。\ はグロビング文字であるため、 の暗黙的な置換が無効になりますNAME by *NAME*。
locate filename \ grep 2
これはファイル名を無視し、ファイル名に 2 を含むファイルの検索を開始します