*
コマンドのワイルドカードが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*