@Caleb, betiğin sadece sembolik bağlantı için sınamalarını sağlama konusunda doğrudur. Ancak neden hakkında bırakılan kısmı merak ettim. Eğer coreutils kaynak koduna bakarsanız ve testin çıktısını alırsanız, sembolik link testini çalıştırdığınızda lstat kullandığını ve -f testini kullanıyorsanız aslında sembolik bağlantıyı takip eden 'stat' dediğini görürsünüz:
$ 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
Stat man sayfasından:
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.
Bu, -f sınamasının, belirtilen dosya adı normal bir dosyaya veya normal bir dosyanın kendisine verilen bir bağlantı olduğu sürece gerçekleşeceği anlamına gelir.
-eve-fbu edilmiştir-e(herhangi bir tip), bir dosya mevcut olup olmadığını bilmek için kullanılmıştır ve-fdosya mevcut ve normal bir dosya olup olmadığını test etmek için özel olarak oldu. Görünüşe göre "normal bir dosya" nın ne olduğunu yanlış anladım ..