我创建于/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 有区别吗?
答案1
给定参数中的尾部斜杠-L
导致符号链接始终被解析(即在 lstat(2) 调用的级别)。参见 POSIX.1基本定义、一般概念、路径名解析,或 Linux 中的“尾部斜杠”路径解析(2)。
这并不是特定于桀骜。
您可以使用一个简单的参数扩展去掉尾部斜杠:
[[ … -L "${file%/}" … ]]
上面的代码应该可以在任何类似 Bourne 的 shell 中工作(克什,灰,短跑,巴什,桀骜等)。