답변:
==
의 bash
특정 별칭으로 =
, -eq
숫자 비교 대신 문자열 (어휘) 비교를 수행합니다 . (Perl과 거꾸로되어 있습니다. 단어 스타일 연산자는 숫자이고 어휘는 어휘입니다.)
-eq
지시 bash
합니다 ( 0
문자열이 숫자가 아닌 경우 경고없이 생성 ).
[ 01 -eq 1 ]
하지만 [ 01 != 1 ]
.
==
A와 [
조작자가 비표준이고, 사용되지 않으며, 그렇지 않은 Bash 전용 . 그것은 ksh에 의해 도입되었으며 zsh (첫 번째 =
인용해야 함), yash 및 GNU [
유틸리티 (및 일부 시스템에서 ksh 스크립트로 구현 된 유틸리티)에서 지원됩니다.
$ if [ "hello" -eq 0 ]; then echo true; fi
bash : [: hello : integer expression expected
볼로 비아의 대답 을 자세히 설명하려면 ...
더 없습니다 >=
또는 <=
문자열 비교 연산자. 그러나 ((...))
산술 명령 과 함께 사용하여 정수를 비교할 수 있습니다 .
또한 다른 문자열 비교 연산자 (사용할 수있는 ==
, !=
, <
, >
,하지만를 =
당신이 내부를 사용하는 경우 정수를 비교) ((...))
.
예
[[ 01 -eq 1 ]]
와 (( 01 == 1 ))
정수 비교를 할. 둘 다 사실입니다.[[ 01 == 1 ]]
와 [ 01 = 1 ]
문자열 비교를 할. 둘 다 거짓입니다.(( 01 -eq 1 ))
와는 (( 01 = 1 ))
오류를 반환합니다.참고 : 이중 괄호 구문 [[...]]
과 이중 괄호 구문 ((...))
이 모든 쉘에서 지원되는 것은 아닙니다.
mksh
/를 zsh
제외하고 (POSIX 모드는 제외) (POSIX 기능은 아니지만)) 8 진수 (10 진수 8)로 취급 (( 010 == 10 ))
되므로 false를 반환 010
합니다.
test
/ [
구현하지 않아도 >=
/ <=
(사업자 yash
의가 [
, 비록이) expr
인수가 숫자로 인식하는 경우가 산술 비교를 할 것입니다하지만, 이러한 연산자를 가지고 ( expr 01 '>=' 1
true를 반환하고, expr X01 '>=' X1
false를 돌려줍니다).
정수 비교를 원하면 (=) 등을 사용할 수있는 (())를 사용하는 것이 좋습니다.
예:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi
(( UID == 0 ))
나 (( ! UID ))
에 대한 그 문제. 즉 주 ((...))
비표준 (a이고 ksh
또한 지원 특징 bash
및 zsh
변형을).
[ $UID -eq 0 ]
하지[ $UID -eq 0]
.