昨日発見した事なんだけど、シェルというよりは test コマンドの問題だけど、test -f で対象のファイルを指定しない時って0になるのな。
これはbash用に書かれたこんな記述の時の動作によって気づいた。

if [ ! -f $file ]; then
echo ファイルなし
exit 1
fi

これで file に何も代入されてないとか空文字列の時にファイルなしにならない。

なんだこの動作は?
testコマンドの仕様?たまたま俺の使ってたLinuxのtestコマンドのバグ?

まあbashなら[[ ]] 使っとけばエラーになるからそっち使っておけば良いんだけどね。