Bash 매뉴얼에서 파일 이름 확장자의 경우:
이 옵션이 설정되어 있고 일치하는 항목이 없으면
nullglob
해당 단어가 제거됩니다.
다음 스크립트는 종료 상태 1을 반환합니다.
파일 이름 확장자가 현재 디렉토리의 jpg 파일과 일치하지 않으면 스크립트가 1로 종료됩니까?
종료 상태 1에 대한 다른 가능성을 어떻게 배제할 수 있습니까?
감사해요.
shopt -s nullglob
for i in *.{png,jpg};
do
filename=${i##*/}
basename=${filename%.*}
[ ! -e ${basename}.pdf ] && convert "$i" ${basename}.pdf ;
done
답변1
아니요, nullglob
셸 옵션을 설정하고 glob 패턴 확장에 실패해도 스크립트가 0이 아닌 종료 상태로 종료되지는 않습니다(그리고 파일 이름을 glob 패턴과 일치해도 일반적으로 $?
셸 변수가 변경되지 않습니다).
아니요리터럴 이름을 가진 파일이 현재 디렉토리에 존재하지 않는 한 설치가 실패 하고 종료 nullglob
상태 1로 종료됩니다.convert
*.jpg
*.png
이는 스크립트에서 실행된 마지막 명령이므로 스크립트는 이 종료 상태로 종료됩니다.
문제가 있는 스크립트를 업데이트한 후:
이제 스크립트가 0이 아닌 종료 상태로 종료됩니다.만약에테스트 결과 마지막으로 처리된 이미지 파일에 대한 PDF 파일이 있습니다 [ ! -e ... ]
(이 경우 스크립트에서 실행된 마지막 명령입니다).
필요하지 않은 경우 사용
[ ! -e "${basename}.pdf" ] && convert "$i" "${basename}.pdf" || true
(추가된 인용문도 참고하세요)