Não tem sentido.
Esse é o jeito que ksh93 manipula se houver muitos argumentos para um operador unário e o operador unário começar com - , então o segundo será escolhido como argumento e o restante será ignorado:
$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ ksh -c '[ -e a.out foo a ] && echo yes'
yes
(Exceto quando o segundo argumento for -a/-o , não será ignorado)
Verificando a fonte de ksh93 test confirme esse comportamento.
Também fazendo strace :
$ { strace -p "$$" & sleep 1; [ -f a.out -size +0 ]; kill "$!"; }
[1] 18467
Process 18455 attached
restart_syscall(<... resuming interrupted call ...>) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("a.out", {st_mode=S_IFREG|0755, st_size=8320, ...}) = 0
kill(18467, SIGTERMProcess 18455 detached
<detached ...>
Outros shells parecidos com Bourne reportarão o erro com este caso. O comportamento não é especificado por POSIX.
Se você quiser verificar se existe um arquivo com tamanho maior que 0, os shells padrão terão -s test operator:
[ -s file ] && echo 'file exist and size greater than 0'
ksh88 também se comporta da mesma forma. Com minha VM do Solaris 10:
$ ksh -c '[ -f a.out foo bar ] && echo yes'
yes
$ strings /usr/bin/ksh | grep -i version
@(#)Version M-11/16/88i
Cascas pré-POSIX também se comportam assim, incluem shell Bourne no Solaris 10, o shell Bourne de herança, Schily osh e Schily sh.