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
カスタマイズできます。