fifoやdeviceはtestコマンド的にはfileではない

少なくとも普通ではないので、-fでは判定できないようだ。
bashだと、-cでキャラクタデバイス、-pでfifoで判定できるみたい。
有無判定だけでいいなら-eでもいいかな。

-b [file]	ファイルがブロックデバイスのとき真。
-c [file]	ファイルがキャラクタデバイスのとき真。
-d [file]	ファイルがディレクトリのとき真。
-e [file]	指定したファイルが存在するとき真。
-f [file]	ファイルがノーマルファイルのとき真。
-g [file]	ファイルのセットGIDビットが立っているとき真。
-h [file]	ファイルがシンボリックリンクのとき真。
-k [file]	ファイルのstickyビットが立っているとき真。
-L [file]	ファイルがシンボリックリンクのとき真。
-p [file]	ファイルが名前付きパイプ(FIFO)のとき真。
-r [file]	ファイルが読み出し可能のとき真。
-S [file]	指定したファイルがソケットのとき真。
-s [file]	ファイルの長さが1バイト以上あるとき真。
-u [file]	ファイルのセットUIDビットが立っているとき真。
-w [file]	ファイルが書き込み可能のとき真。
-x [file]	ファイルが実行可能のとき真。

deviceやfifoなんて、testしないから知らなかったよ。