文件既是常规文件又是符号链接

时间:2014-11-05 14:46:29

标签: shell zsh symlink

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

-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)是普通文件还是符号链接,{{1}两个人都说是......:

zsh

不是符号链接假设不是常规文件吗?条件表达式18:31 : [[ -f B ]] && echo "True" True 18:31 : [[ -h B ]] && echo "True" True 的文档(here)没有提供有关不同案例如何工作的完整详细信息。

zsh

修改

经过多次挖掘,我在Unix.SE上发现了这个Q& A:https://unix.stackexchange.com/questions/22009/distinguishing-a-regular-file-from-a-symlink。这大约是zsh --version zsh 5.0.5 (x86_64-apple-darwin14.0) 但看起来它也适用于bash

1 个答案:

答案 0 :(得分:1)

zsh几乎肯定会使用lstat(2)中的S_ISREG()S_ISLNK()宏。由于S_ISLNK()小于S_ISREG(),我认为符号链接在历史上被视为常规文件(因为它们不是目录,块/字符设备等),并且保持行为以便向后兼容。然而,我无法找到任何直接的证据。