「grep -r foo *」対「grep -r foo」。

「grep -r foo *」対「grep -r foo」。

grep -rを使用すると、*またはで検索できます。同じ内容を返すように見えますが、実際には同じですか?

「foo」を検索して書き込めるとしましょう。

grep -r foo *

または

grep -r foo .

誰かが。そして*を説明しようとしていますか?

答え1

grep -r foo *隠しファイルやディレクトリでは一致するものが見つからず、*シェルで拡張されていないため、次のエラーが発生する可能性があります。パラメータリストが長すぎます。現在のディレクトリにエントリが多いときにエラーが発生した場合、または一部のファイルまたはディレクトリの名前がダッシュ文字で始まると、他のエラーや誤動作が発生します。

通貨に上記grep -r foo .の欠陥は​​ありません。

修正する:

別の違い:grepのマニュアルページ(@fedora17)は次のように言います。

-r, --recursive
    Read all files under each directory, recursively, following symbolic links only if they
    are on  the  command  line.  ...

空のディレクトリでこのコマンドを実行する場合にも違いがあります。

$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$

答え2

アスタリスクを使用すると、名前がドットで始まるディレクトリ内のファイルを一致させることはできません.cache

修正する:

これは*、呼び出し前にシェルによって拡張され、単一のディレクトリgrep名(現在では)ではなく名前のリストを受け取るためです.。シェルがモードを拡張する方法は、シェルパラメータ(nullglobまたはnocaseglob他のbashオプション)または環境変数(たとえば、LANGまたは)を使用してLC_ALLカスタマイズできます。

関連情報