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; fibash : [: 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 ].