2014-11-05 83 views
2

我有三个文件,一个真正的(“规则”)文件和两个链接的符号链接:文件既是一个普通文件和符号链接

-rw-r--r-- 1 user staff  24 4 Nov 18:23 A 
lrwxr-xr-x 1 user staff  1 25 Oct 17:43 B -> A 
lrwxr-xr-x 1 user staff  1 4 Nov 16:54 C -> B 

现在,使用zsh条件表达式([[),我测试B(或C)是否是一个普通的文件或者一个符号链接,并zsh说是既...:

18:31 : [[ -f B ]] && echo "True" 
True 
18:31 : [[ -h B ]] && echo "True" 
True 

不应该不被普通文件的符号链接? zsh条件表达式的文档(here)没有详细说明不同情况如何工作。

zsh --version 
zsh 5.0.5 (x86_64-apple-darwin14.0) 

编辑

更多的挖掘后,我发现这个问答& A于Unix.SE:https://unix.stackexchange.com/questions/22009/distinguishing-a-regular-file-from-a-symlink。这是关于bash,但它看起来也适用于zsh

回答

1

zsh几乎可以肯定地使用来自lstat(2)S_ISREG()S_ISLNK()宏。由于S_ISLNK()年龄小于S_ISREG(),我想象符号链接在历史上被当作普通文件(因为它们不是目录,块/字符设备等),并且为了向后兼容而保留行为。但是,我无法找到任何直接的证据。

相关问题