Bash : double equals vs -eq

Bash에서 정수 비교를 수행 중입니다 (사용자가 루트로 실행 중인지 확인하려고 시도). 수행 방법 :

Double equals :

if [ $UID == 0 ] then fi 

-eq

if [ $UID -eq 0 ] then fi 

배쉬에는> = 또는 < =가없고 -ge와 -le 만 있다는 것을 이해합니다. -eq가 있다면?

양쪽을 비교하는 방식에 차이가 있습니까?

댓글

  • 괄호 안에 공백이 있어야합니다. [ $UID -eq 0]가 아니라 [ $UID -eq 0 ].

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 기능은 bashzsh 변형 포함).

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다