web-dev-qa-db-ja.com

グロビングはシェルの機能ですか?

thisthis one のような多くの質問と回答を読みました

ワイルドカードは、コマンドを実行する前にシェルによって展開され、シェルの機能であることがわかっています。また、ワイルドカードは、多くの引数を受け入れることができるコマンドで機能します。 find . -name *.rbでは、現在のディレクトリに複数のファイルがある場合、findはエラーを返します。findは複数の引数を受け入れることができず、これを解決する方法は次のとおりです。

find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb

アスタリスクをエスケープし、シェルによる展開を防ぎますが、ワイルドカードはシェルの機能です。アスタリスクをエスケープすると、シェルはその意味を認識せず、*.rbという名前のファイルを見つけるはずです。この場合、アスタリスクはどのように展開されますか?

12
Sinoosh

はい、シェルは*をディレクトリ内の任意の文字を含むすべてのファイルとして理解し、*.rbを任意の文字および末尾が.rbを含むすべてのファイルとして理解し、そのように展開します。

findコマンド自体は、グロビングを受け入れます。

*を引用符で囲まない場合、シェルは展開しますbeforefindコマンドは引数を参照するため、グロブ*.rbの代わりにfindに渡され、ディレクトリ内のグロブに一致するすべてのファイルはfindに渡され、findはそれらを引数として解釈しようとしますが、エラーになるか、少なくとも必要なものではない可能性があります(一致しない場合のみ正しく動作します)現在のディレクトリ内のファイル)

21
Zanna