Shell

測試帶有斜杠的連結?

  • October 22, 2013

我創建於/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(kshashdashbashzsh等)中工作。

引用自:https://unix.stackexchange.com/questions/96913