2014-11-05 80 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(),我想象符號鏈接在歷史上被當作普通文件(因爲它們不是目錄,塊/字符設備等),並且爲了向後兼容而保留行爲。但是,我無法找到任何直接的證據。

相關問題