O @Caleb está correto ao fazer o script apenas testar o link simbólico. No entanto, a parte sobre o porquê foi deixada de fora e eu fiquei curioso. Se você olhar o código fonte do coreutils e rastrear a saída do teste, poderá ver que, quando executa o teste do link simbólico, ele usa lstat e, se você usa o teste -f, na verdade, chama 'stat', que segue o link simbólico:
$ ln -s varnish_config XXX
$ strace -s 2000 test -L XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-L", "XXX"], [/* 47 vars */]) = 0
lstat("XXX", {st_mode=S_IFLNK|0777, st_size=14, ...}) = 0
$ strace -s 2000 test -L varnish_config 2>&1 | grep varnish
execve("/usr/bin/test", ["test", "-L", "varnish_config"], [/* 47 vars */]) = 0
lstat("varnish_config", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
$ strace -s 2000 test -f XXX 2>&1 | grep XXX
execve("/usr/bin/test", ["test", "-f", "XXX"], [/* 47 vars */]) = 0
stat("XXX", {st_mode=S_IFREG|0664, st_size=1046, ...}) = 0
Na página do manual stat:
stat() stats the file pointed to by path and fills in buf.
lstat() is identical to stat(), except that if path is a symbolic link,
then the link itself is stat-ed, not the file that it refers to.
Isso significa que o teste -f retornará verdadeiro, desde que o nome do arquivo especificado seja um link simbólico para um arquivo comum ou para um arquivo comum.
-ee-ffoi-eusada para saber se existia um arquivo (de qualquer tipo) e-fera especificamente para testar se o arquivo existia e era um arquivo normal. Parece que eu mal o que um "arquivo regular" era ..