테스트 명령이 for 루프 변수에 의해 차단되는 이유는 무엇입니까?

테스트 명령이 for 루프 변수에 의해 차단되는 이유는 무엇입니까?

디렉토리에서 깨진 심볼릭 링크를 모두 식별하고 싶습니다.

더 나은 솔루션을 알지 못해서 다음과 같은 간단한 bash 한 줄짜리를 시도했습니다(bash 버전은 4.2.46이며 약간 구식이므로 언급할 가치가 있을 것입니다).

for f in $(ls); do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done

불행히도 이것은 작동하지 않습니다. 이것을 실행하면 오류를 확인하려고 합니다.

for f in $(ls); do test -L $f && echo "$f is a valid symlink"; done

유효한 기호 링크가 존재하더라도 출력이 생성되지 않습니다. 동일한 명령을 실행하고 $f실제 파일 이름으로 바꾸면 작동합니다. 또한 f=filename; test -L $f && echo "$f is a valid symlink";예상대로 작동하므로 문제는 루프에 있는 것 같습니다.

내가 무엇을 놓치고 있나요?

답변1

ls문제는 출력에 색상을 사용하는 데서 발생하는 것 같습니다 . 당신이 이래로구문 분석된 ls출력, 색상이 출력되면 해당 이스케이프 코드 가 ls주어진 값으로 끝나고 일치하는 파일을 찾을 수 없습니다. 이 경우 테스트는 출력 없이 실패 하므로 더 이상 현명해지지 않습니다.ftesttest

대신 glob을 사용하세요.

for f in *; do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done

바라보다깨진 심볼릭 링크를 찾는 방법근본적인 문제에 대한 다른 가능한 해결책.

관련 정보