bash에서 -eq 와 == 의 차이가 무엇인가요?

익명 사용자의 이미지

아래와 같은 테스트 코드를 작성했습니다.

  4 if [ "1" == 1 ]
  5 then
  6     echo True
  7 else
  8     echo False
  9 fi
 10
 11
 12 if [ "1" -eq 1 ]
 13 then
 14     echo True
 15 else
 16     echo False
 17 fi

결과는 모두 True입니다.

여기서 질문,
1) -eq와 == 이 구분되어 존재하는 이유가 무엇인가요? 분명 이유가 있게지요, 어떤 경우 둘의 차이를 확인할 수 있을까요?

2) 문자와 숫자("1"과 1), bash에서 문자1과 숫자1의 구분이 없는 건가요? 아니면 다른 언어 (e예, python 등)과 달리 bash에서는 인용부호가 문자를 지칭하는데 사용되지 않는 건가요?

익명 사용자의 이미지

==는 두 문자열이 같은지 비교합니다. -eq는 두 문자열이 "숫자로써" 같은지 비교합니다.

테스트 코드를 살짝 바꿔서 이해시켜드릴 수 있을 것 같은데, 한번 해볼까요?

if [ "01" == 1 ]
then
    echo True
else
    echo False
fi
 
 
if [ "01" -eq 1 ]
then
    echo True
else
    echo False
fi
익명 사용자의 이미지

두 번째 질문에도 답을 드리자면, echo "1"echo 1를 비교해보세요.

결국 bash에서 다루는 건 기본적으로 다 문자열이라고 보시면 됩니다.
그 문자열을 숫자로 해석할 수 있는지, 만약 그렇다면 숫자로 해석하여 사용할 것인지는 상황에 따라 다르고요.

익명 사용자의 이미지

감사합니다.

이해가 됐습니다.