下記のディレクトリ構成が検証しています。
# find .
.
./a
./a/test1
./b
./b/test2
./c
./c/test3
# find . -xdev -name test
./test
# find . -xdev -name test1
./a/test1
-name test、-name test1の場合は、想定通りの結果が得られます。
# find . -xdev -name test*
./test
しかし、-name testとすると./testしか出力されません。
これは、カレントディレクトリにtestというtestに該当するファイルが存在するため、findコマンドに引数が渡される前にkshがアスタリスクを展開してしまうためです。
# truss -a find . -xdev -name test* 2>&1 | grep argv
argv: find . -xdev -name test
この動きはtrussで確認することができます。
# find . -xdev -name t*1
./a/test1
# truss -a find . -xdev -name t*1 2>&1 | grep argv
argv: find . -xdev -name t*1
-name t*1など、カレントディレクトリにパターンにマッチするファイルが存在しない場合はアスタリスクが展開されずにそのままfindコマンドに渡されるため、サブディレクトリのtest1が表示されます。
# find . -xdev -name "test*"
./a/test1
./b/test2
./c/test3
./test
# truss -a find . -xdev -name "test*" 2>&1 | grep argv
argv: find . -xdev -name test*
カレントディレクトリにマッチするファイルが存在する場合でも、ダブルクォーテーションで囲むことでアスタリスク展開が抑止されるため意図した結果が得られます。
# set -o noglob
# find . -xdev -name test*
./a/test1
./b/test2
./c/test3
./test
# ksh -fc "find . -xdev -name test*"
./a/test1
./b/test2
./c/test3
./test
また、noglobや-fオプションを使用することでもアスタリスク展開を抑止することができます。