`find。 -name *foo*`はどのように機能しますか?

`find。 -name *foo*`はどのように機能しますか?

*コマンドのワイルドカードがbashに置き換えられているようですが、現在のディレクトリのエントリと一致しない限り、コマンドはfind . -name *foo*機能します。*foo*これはとても混乱しています。

答え1

Bashが一致するものが見つからない場合は、拡張されていないsを使用してリテラル文字列をアプリケーションに渡します*。たとえば、

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test *foo*
foo

$ /tmp/test *bar*
*bar*

bash*foo*一致により拡張されますが、*bar*不一致により通過します。このnullglobオプションは、bash が一致しないパターンを空の文字列に解析するように指示します。

$ shopt -s nullglob
$ /tmp/test *bar*

$

答え2

拡張されていない文字列を取得するには、引用符findで囲むか、バックスラッシュでワイルドカードを保護します。

$ ls
foo

$ cat /tmp/test
echo $1

$ /tmp/test '*foo*'
*foo*

$ /tmp/test \*foo\*
*foo*

関連情報