@Caleb ma rację, jeśli skrypt ma po prostu przetestować dowiązanie symboliczne. Jednak część o tym, dlaczego została pominięta, byłam ciekawa. Jeśli spojrzysz na kod źródłowy coreutils i przejrzysz wynik testu, zobaczysz, że po uruchomieniu testu dowiązania symbolicznego używa on lstat, a jeśli używasz testu -f, to tak naprawdę wywołuje „stat”, który następuje po dowiązaniu symbolicznym:
$ 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
Ze strony man statystyki:
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.
Oznacza to, że test -f zwróci wartość true, o ile podana nazwa pliku jest dowiązaniem symbolicznym do zwykłego pliku lub samego zwykłego pliku.
-e
i-f
była-e
używana-f
do sprawdzenia, czy plik (dowolnego typu) istnieje, a konkretnie do sprawdzenia, czy plik istnieje i czy jest zwykłym plikiem. Wygląda na to, że źle zrozumiałem, czym był „zwykły plik”.