종료 상태$를 인용하는 이유가 있나요? 바꾸다?

종료 상태$를 인용하는 이유가 있나요? 바꾸다?

Google의 bash 스크립팅 스타일 가이드를 보고 종료 상태 변수를 참조하는 것을 확인했습니다.$? 여기.

if [[ "$?" -ne 0 ]]; then
    error_message
fi

반환 값은 항상 숫자인 줄 알았는데, 이를 인용할 이유가 무엇이겠습니까?

이것은 단지 좋은 습관입니까("$@"와 같은 다른 특수 쉘 변수를 인용하고 싶기 때문에)?

답변1

추천

너는 이걸 읽어야 해훌륭한 답변자세한 내용은.


숫자가 포함된 설정은 IFS코드를 손상시킬 수 있습니다.

$ IFS=0
$ echo test
$ [ $? -eq 0 ] && echo done
bash: [: : integer expression expected

일부 쉘은 IFS환경( dash, ash)에서 상속할 수 있지만 일부는 그렇지 않습니다( bash, zsh, ksh). 그러나 누군가가 환경을 제어할 수 있으므로 스크립트가 어쨌든 중단될 것입니다( $#그리고 $!영향도 받게 됩니다).

귀하의 예에서는 새로운 테스트를 사용했기 [[...]]때문에 필드 분할이 꺼져 있으며 이 경우 인용이 필요하지 않습니다. 이전 테스트를 사용하는 경우 이는 중요합니다 [...].

$ IFS=0
$ echo test
$ [[ $? -eq 0 ]] && echo done
done

답변2

기술적으로는 그렇지 않습니다.필요인용문의 왼쪽 [[ ... ]]. 그러나 ~함에 따라스티븐 차제라스그 사람 댓글에 넣어봐아름다운 대답, 인용하지 않을 이유가 없으니 그냥 인용하고 밤에 잠을 더 잘 자세요. 이는 권장되는 좋은 방법이며 우려 사항과 질문을 줄일 수 있습니다.

예전 스타일로 [ ... ]~ 해야 하다제품 견적, 선택의 여지가 없습니다. 어떤 경우에도 [ ... ]더 이상 이전 스타일을 사용해서는 안 되며, 새로운 스타일을 사용 [[ ... ]]하는 것이 좋습니다.

관련 정보