디렉토리의 모든 파일을 나열하는 bash 스크립트가 있습니다.
for file in foo/*; do
echo ${file##*/}
done
디렉터리에 파일이 있으면 제대로 작동하지만, 파일이 없으면 이전 디렉터리의 파일이 나열됩니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
디렉토리에 아무것도 없으면 foo
변수는 file
리터럴 값을 얻습니다 foo/*
. 교체는 ${file##*/}
문자열을 생성 *
하고 echo
현재 디렉터리의 모든 이름을 출력합니다.
이 문제를 해결하려면 bash
가장 쉬운 방법은 를 사용하여 nullglob
셸 옵션을 설정하는 것입니다 shopt -s nullglob
. 이렇게 하면 패턴과 일치하는 이름이 없는 경우 파일 이름 글로빙이 패턴 자체로 확장되지 않습니다.
bash
매뉴얼 에서 :
nullglob
설정된 경우,
bash
어떤 파일과도 일치하지 않는 패턴(위의 경로 이름 확장 참조)이 자신 대신 빈 문자열로 확장되도록 허용합니다.
시. 매뉴얼에서 "파일" 대신 "이름" 또는 "파일 이름"을 사용하고 싶습니다.