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 有区别吗?
给定的参数中的尾部斜杠-L导致符号链接始终被解析(即在 lstat(2) 调用级别)。请参阅Linux 的path_resolution(2) 中的POSIX.1基本定义、一般概念、路径名解析或“尾随斜杠” 。
这不是特定于zsh 的。
您可以使用简单的参数扩展来去除尾部斜杠:
[[ … -L "${file%/}" … ]]
Run Code Online (Sandbox Code Playgroud)
以上应该适用于任何类似 Bourne 的 shell(ksh、ash、dash、bash、zsh等)。