違いは何ですか:
grep "string" . -r --include *.pl
そして
grep "string" . -r --include "*.pl"
後者にはサブディレクトリのファイルが含まれますが、前者はそうではありません。なぜ?
ベストアンサー1
(アスタリスク*
またはアスタリスク)は、通常、コマンドを発行する前にシェルで解釈される特殊文字です。 (通常)前にドットがあるファイル名を除くすべてのファイル名に展開されます。よりパターンマッチングのためのbashマニュアルより多くの情報を知りたいです。
アスタリスクを引用符の中に入れると、シェルはアスタリスクを解釈せずにコマンドにそのまま提供します。
例えば。引用されたものの1つ:
grep "string" . -r --include "*.pl"
ここでは、パラメータを含むgrep
オプションを受け取ります。 charで始まる4桁の文字列。この文字列の機能は、完全に次のように異なります。この場合、globと一致するファイルのみが考慮されるという意味です。--include
*.pl
*
grep
grep
--include
*.pl
私が知っている限り、gnu grepは後でgnu bashと同じパターンマッチライブラリを使用します。これは、表示されているのと同じファイルが含まれることを意味しますecho *.pl
。
引用しない:
grep "string" . -r --include *.pl
*.pl
ここで、シェルはコマンドを実行する前にまずglobを拡張します。 globはallに展開されます.pl
。
ファイルがあるとしますfoo.pl
。 globを展開した後、コマンドラインは次のようになります。bar.pl
baz.pl
grep "string" . -r --include foo.pl bar.pl baz.pl
これはパラメータ付きのオプションを受け取り、grep
その後にオプションを受け取ります。--include
foo.pl
bar.pl
baz.pl
--include foo.pl
パターンに一致するファイルのみを考慮するようにgrepに指示しますfoo.pl
。パターンにワイルドカードがないので(アスタリスクなし)、一致するファイルはfoo.pl
。
オプションbar.pl
とbaz.pl
ガイドライン grep もこれらのファイルから検索します。ただし、パターンと一致しないため、前のfoo.pl
パターンに基づいて無視されます--include
。