回答:
一致が見つからない場合、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*
$
zsh: no matches found
。
no_nomatch
この動作をトリガーする必要があります。
find . -name *foo*
とfind . -name '*foo*'
、ワイルドカードの一致が期待どおりに機能します。