私は偶然会ったこれこの記事では、findコマンドを説明しようとしています。それは例です。
find /tmp -iname "data*.txt"
今この記事ここ指摘
二重引用符は、「$」で始まる単語の置換を抑制しません。ただし、ワイルドカード拡張は抑制されます。
これら2つのコマンドを試してみると
admin@localhost Downloads$ ls
gallifrey-road-doctors-14437-1366x768.jpg mydir
admin@localhost Downloads$ find . -iname "*gall*"
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$ find . -iname "*gall*" -----> A
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$ find . -iname *gall* -----> B
./gallifrey-road-doctors-14437-1366x768.jpg
admin@localhost Downloads$
出力は同じようです。どのような状況で違いますか?二重引用符がワイルドカード拡張を抑制しないのはなぜですかA
?私の考えでは、Aは動作せず、Bだけが動作するようです。
答え1
ケースB:
find . -iname *gall*
これシェル*gall*
パターンに一致するすべてのファイルのリストに展開されます。現在のディレクトリには、このパターンに一致するファイルが1つしかないため、次のようになります。
find . -iname gallifrey-road-doctors-14437-1366x768.jpg
...それで、findは正しい名前と一致するファイルを検索します。foo-gallifrey-road-doctors-14437-1366x768.jpg
見つかりません。 globに一致するファイルが複数ある場合は、誤ったfindコマンドが実行され、エラーで終了することが保証されます。
ケースA:
find . -iname "*gall*"
引用符によるシェルに慣れるパターンを展開してください。これは次のとおりです(find
表示される内容は次のとおりです)。
find . -iname *gall*
その後、パターンはfindコマンドでパターンと一致するすべてのファイル(およびディレクトリなど)を検索するために使用されます。gallifrey-road-doctors-14437-1366x768.jpg
パターンにfoo-gallifrey-road-doctors-14437-1366x768.jpg
一致するすべてのファイルを見つけます*gall*
。
したがって、コマンドはシェルを通過します(引用符内のグローバルを拡張せずに一番外側の引用符を削除します)。それからを通過しながら、find
内部的にパターンを使用してファイル名を一致させます。