末尾のスラッシュを含むリンクをテストしますか?

末尾のスラッシュを含むリンクをテストしますか?

私が作った場所/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に似たすべてのシェルで動作します(ケシ禁煙健康増進協会スプリント強く打つ扱いにくい待つ)。

おすすめ記事