답변:
==의 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 '>=' 1true를 반환하고, expr X01 '>=' X1false를 돌려줍니다).
정수 비교를 원하면 (=) 등을 사용할 수있는 (())를 사용하는 것이 좋습니다.
예:
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].