我有三个文件,一个是真正的(“常规”)文件和两个链式符号链接:
-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
。
答案 0 :(得分:1)
zsh几乎肯定会使用lstat(2)
中的S_ISREG()
和S_ISLNK()
宏。由于S_ISLNK()
小于S_ISREG()
,我认为符号链接在历史上被视为常规文件(因为它们不是目录,块/字符设备等),并且保持行为以便向后兼容。然而,我无法找到任何直接的证据。