Bash에서 정수 비교를 수행 중입니다 (사용자가 루트로 실행 중인지 확인하려고 시도). 수행 방법 :
Double equals :
if [ $UID == 0 ] then fi
-eq
if [ $UID -eq 0 ] then fi
배쉬에는> = 또는 < =가없고 -ge와 -le 만 있다는 것을 이해합니다. -eq
가 있다면?
양쪽을 비교하는 방식에 차이가 있습니까?
댓글
Answer
==
는 iv id = “0e573a78d4입니다. =
에 대한 “>
별 별칭. -eq
숫자 비교 대신 문자열 (어휘) 비교를 수행합니다. (Perl의 거꾸로 : 단어 스타일 연산자는 숫자이고 기호 연산자는 어휘입니다.)
코멘트
- 양쪽이 정수이고 양쪽을 문자열로 변환 한 다음 비교합니까?
- 더 정확하게는 ' 반대 방향입니다. 모든 것이 문자열입니다.
-eq
는 문자열을 정수로 해석하도록bash
에 지시합니다 (문자열이있는 경우 경고없이0
생성). ' 숫자가 아님). - @tjameson 예를 들면 :
[ 01 -eq 1 ]
그러나[ 01 != 1 ]
. -
==
는[
연산자는 비표준이므로 사용되지 않으며 bash 특정 이 아닙니다. ksh에서 도입되었으며 zsh에서도 지원됩니다 (첫 번째=
를 인용해야 함). , yash 및 GNU[
유틸리티 ( 최소한 일부 시스템에서 ksh 스크립트로 구현 된 모든 유틸리티). - @geekosaur 문자열이 '이면 bash v4.3.42에서 경고가 표시됩니다. t 숫자 :
$ if [ "hello" -eq 0 ]; then echo true; fi
bash : [: hello : 정수 표현식 예상
답변
bollovan의 답변 에 대해 자세히 설명하려면 …
또는 <=
문자열 비교 연산자. 그러나 ((...))
산술 명령과 함께 사용하여 정수를 비교할 수 있습니다.
다른 문자열 비교 연산자 (==
, !=
, <
, >
(=
) ((...))
내에서 정수를 사용하는 경우 정수를 비교합니다.
예
-
[[ 01 -eq 1 ]]
및(( 01 == 1 ))
모두 정수를 수행합니다. 비교. 둘 다 사실입니다. -
[[ 01 == 1 ]]
및[ 01 = 1 ]
모두 문자열 비교를 수행합니다. 둘 다 거짓입니다. -
(( 01 -eq 1 ))
및(( 01 = 1 ))
모두 오류를 반환합니다.
참고 : 이중 괄호 구문 [[...]]
및 이중 괄호 구문 ((...))
은 모든 셸에서 지원되지 않습니다.
댓글
- 참고 (
mksh
/zsh
제외 ( POSIX 모드 ('는 POSIX 기능이 아님))),(( 010 == 10 ))
는 는 8 진수 (10 진수 8)로 처리됩니다. - 대부분의
test
/[
구현에는 '>=
/<=
연산자 (yash
'의[
에 있음),expr
그러한 연산자가 있지만 ar 인수가 숫자로 인식되는 경우 ithmetic 비교 (expr 01 '>=' 1
는 true를 반환하고expr X01 '>=' X1
는 false를 반환)
Answer
정수 비교를 수행하려면 (())를 사용하는 것이 좋습니다. 여기서> = 등을 사용할 수도 있습니다.
예 :
if (( $UID == 0 )); then echo "You are root" else echo "You are not root" fi
댓글
- 또는
(( UID == 0 ))
또는(( ! UID ))
.((...))
는 비표준 (ksh
기능은bash
및zsh
변형 포함).
[ $UID -eq 0]
가 아니라[ $UID -eq 0 ]
.