후행 슬래시가 있는 링크를 테스트하시겠습니까?

후행 슬래시가 있는 링크를 테스트하시겠습니까?

내가 만든 곳/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과 유사한 모든 쉘에서 작동합니다(케시,금연 건강 증진 협회,스프린트,세게 때리다,다루기 힘든기다리다).

관련 정보