파일 이름 확장자가 어떤 파일과도 일치하지 않으면 스크립트가 1로 종료됩니까?

파일 이름 확장자가 어떤 파일과도 일치하지 않으면 스크립트가 1로 종료됩니까?

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

(추가된 인용문도 참고하세요)

관련 정보