测试带有斜杠的链接?

rub*_*o77 4 shell directory slash symlink filenames

我在 /tmp/test/

mkdir somedir
ln -s somedir/ somelink
Run Code Online (Sandbox Code Playgroud)

我只想遍历目录

for file in */ ; do 
  if [[ -d "$file" && ! -L "$file" ]]; then
    echo "$file is a directory";
  fi;
done
Run Code Online (Sandbox Code Playgroud)

但为什么会这样somelink is a directory

而没有斜线它doesent?

for file in * ; do 
...
Run Code Online (Sandbox Code Playgroud)

和 zsh 有区别吗?

Chr*_*sen 6

给定的参数中的尾部斜杠-L导致符号链接始终被解析(即在 lstat(2) 调用级别)。请参阅Linux 的path_resolution(2) 中的POSIX.1基本定义、一般概念、路径名解析或“尾随斜杠” 。

这不是特定于zsh 的

您可以使用简单的参数扩展来去除尾部斜杠:

[[ … -L "${file%/}" … ]]
Run Code Online (Sandbox Code Playgroud)

以上应该适用于任何类似 Bourne 的 shell(kshashdashbashzsh等)。