Bash: -eq와 이중 동일

Bash: -eq와 이중 동일

나는 bash에서 정수 비교를 수행하고 있으며 (사용자가 루트로 실행 중인지 확인하려고) 두 가지 다른 접근 방식을 찾았습니다.

더블은 다음과 같습니다:

if [ $UID == 0 ]
then
fi

-eq

if [ $UID -eq 0 ]
then
fi

bash에는 >= 또는 <=가 없고 -ge 및 -le만 있다는 것을 알고 있습니다. 그렇다면 ==a가 있는 이유는 무엇입니까 -eq?

양측이 비교하는 방식에 차이가 있나요?

답변1

==숫자 비교 대신 문자열(어휘) 비교를 수행하는 bash특정 별칭 입니다 . (Perl에 대한 후퇴입니다. 단어 스타일 연산자는 숫자이고 기호 연산자는 어휘입니다.)=-eq

답변2

상세 설명보로반의 답변...

문자열에는 >=OR 비교 연산자가 없습니다 <=. 그러나 ((...))산술 명령과 함께 사용하여 정수를 비교할 수 있습니다.

내부적으로 다른 문자열 비교 연산자를 사용하는 경우 ==(사용하지 않는 경우) 이를 사용하여 정수를 비교할 수도 있습니다.!=<>=((...))

  • [[ 01 -eq 1 ]]둘 다 (( 01 == 1 ))정수 비교를 수행합니다. 둘 다 사실입니다.
  • [[ 01 == 1 ]]둘 다 [ 01 = 1 ]문자열 비교를 수행합니다. 둘 다 가짜입니다.
  • (( 01 -eq 1 ))(( 01 = 1 ))오류를 반환합니다.

참고: 모든 쉘이 이중 괄호 구문 [[...]]과 이중 괄호 구문을 지원하는 것은 아닙니다.((...))

답변3

정수 비교를 하려면 (( ))를 사용하는 것이 좋지만 >= 등을 사용할 수도 있습니다.

예:

if (( $UID == 0 )); then
   echo "You are root"
else
   echo "You are not root"
fi

관련 정보