산술 오류 - ARCHIVE가 true로 표시되는 이유는 무엇입니까? [복사]

산술 오류 - ARCHIVE가 true로 표시되는 이유는 무엇입니까? [복사]

편집: 처음에는 이것이 범위 문제라고 생각했습니다. 실제 문제를 반영하여 제목을 업데이트했습니다.

아래에 MRE를 만들었습니다.

#!/bin/bash

while getopts a OPTION
do
  case ${OPTION} in
    a)
      echo "archive case"
      ARCHIVE=true
      ;;
    ?)
      echo "error"
      ;;
  esac
done

if [[ "${ARCHIVE}" -eq true ]]
then
  echo "it's archived"
else
  echo "It's not archived"
fi

"./script.sh"를 실행하면 "Archived" 반환 값을 얻지만 "./script.sh -a"를 실행하면 출력에 "Archived Case" 및 "Archived"가 표시됩니다.

여기서 무슨 일이 일어나고 있는지 말해 줄 수 있는 사람 있나요? Case 문이 유효하다면 ARCHIVE 변수를 만드는 이유는 무엇입니까?

당신의 도움을 주셔서 감사합니다.

답변1

여기서 문제는 범위 지정이 [[ "${ARCHIVE}" -eq true ]]아니라산수테스트하고 두 문자열 합계 모두 산술을 0으로 ${ARCHIVE}평가할 가능성이 높습니다 .true

원할 수도 있습니다 [[ "${ARCHIVE}" == true ]]. LHS의 큰따옴표가 꼭 필요한 것은 아니지만, 다음을 참조하세요.언제 큰따옴표가 필요합니까?.

당신은 또한 볼 수 있습니다조건부 구조: [[...]].

관련 정보