명령 목록 오류

명령 목록 오류

디렉토리의 모든 파일을 나열하는 bash 스크립트가 있습니다.

for file in foo/*; do
  echo ${file##*/}
done

디렉터리에 파일이 있으면 제대로 작동하지만, 파일이 없으면 이전 디렉터리의 파일이 나열됩니다.

이 문제를 어떻게 해결할 수 있나요?

답변1

디렉토리에 아무것도 없으면 foo변수는 file리터럴 값을 얻습니다 foo/*. 교체는 ${file##*/}문자열을 생성 *하고 echo현재 디렉터리의 모든 이름을 출력합니다.

이 문제를 해결하려면 bash가장 쉬운 방법은 를 사용하여 nullglob셸 옵션을 설정하는 것입니다 shopt -s nullglob. 이렇게 하면 패턴과 일치하는 이름이 없는 경우 파일 이름 글로빙이 패턴 자체로 확장되지 않습니다.

bash매뉴얼 에서 :

nullglob

설정된 경우, bash어떤 파일과도 일치하지 않는 패턴(위의 경로 이름 확장 참조)이 자신 대신 빈 문자열로 확장되도록 허용합니다.

시. 매뉴얼에서 "파일" 대신 "이름" 또는 "파일 이름"을 사용하고 싶습니다.

관련 정보