나는 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