Shell
測試帶有斜杠的連結?
我創建於
/tmp/test/
mkdir somedir ln -s somedir/ somelink
我只想遍歷目錄:
for file in */ ; do if [[ -d "$file" && ! -L "$file" ]]; then echo "$file is a directory"; fi; done
但為什麼會這樣
somelink is a directory
?而沒有斜線呢?
for file in * ; do ...
zsh有區別嗎?
給定參數的尾部斜杠
-L
導致符號連結始終被解析(即在 lstat(2) 呼叫的級別)。請參閱 Linux 的path_resolution(2)中的POSIX.1 Base Definitions、General Concepts、Pathname Resolution或“Trailing slashes” 。這不是特定於zsh的。
您可以使用簡單的參數擴展來去除尾部斜杠:
[[ … -L "${file%/}" … ]]
以上應該在任何類似 Bourne 的 shell(ksh、ash、dash、bash、zsh等)中工作。