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