![산술 오류 - ARCHIVE가 true로 표시되는 이유는 무엇입니까? [복사]](https://linux55.com/image/228437/%EC%82%B0%EC%88%A0%20%EC%98%A4%EB%A5%98%20-%20ARCHIVE%EA%B0%80%20true%EB%A1%9C%20%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
편집: 처음에는 이것이 범위 문제라고 생각했습니다. 실제 문제를 반영하여 제목을 업데이트했습니다.
아래에 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의 큰따옴표가 꼭 필요한 것은 아니지만, 다음을 참조하세요.언제 큰따옴표가 필요합니까?.
당신은 또한 볼 수 있습니다조건부 구조: [[...]].