this や this one のような多くの質問と回答を読みました
ワイルドカードは、コマンドを実行する前にシェルによって展開され、シェルの機能であることがわかっています。また、ワイルドカードは、多くの引数を受け入れることができるコマンドで機能します。 find . -name *.rb
では、現在のディレクトリに複数のファイルがある場合、find
はエラーを返します。findは複数の引数を受け入れることができず、これを解決する方法は次のとおりです。
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
アスタリスクをエスケープし、シェルによる展開を防ぎますが、ワイルドカードはシェルの機能です。アスタリスクをエスケープすると、シェルはその意味を認識せず、*.rb
という名前のファイルを見つけるはずです。この場合、アスタリスクはどのように展開されますか?
はい、シェルは*
をディレクトリ内の任意の文字を含むすべてのファイルとして理解し、*.rb
を任意の文字および末尾が.rb
を含むすべてのファイルとして理解し、そのように展開します。
find
コマンド自体は、グロビングを受け入れます。
*
を引用符で囲まない場合、シェルは展開しますbeforefind
コマンドは引数を参照するため、グロブ*.rb
の代わりにfind
に渡され、ディレクトリ内のグロブに一致するすべてのファイルはfind
に渡され、find
はそれらを引数として解釈しようとしますが、エラーになるか、少なくとも必要なものではない可能性があります(一致しない場合のみ正しく動作します)現在のディレクトリ内のファイル)