편집: 처음에는 이것이 범위 문제라고 생각했습니다. 실제 문제를 반영하여 제목을 업데이트했습니다.
아래에 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의 큰따옴표가 꼭 필요한 것은 아니지만, 다음을 참조하세요.언제 큰따옴표가 필요합니까?.
당신은 또한 볼 수 있습니다조건부 구조: [[...]].