[shell] sh 쉘을 사용하여 문자열 비교

SH 셸을 사용하고 있으며 문자열을 변수 값과 비교하려고하지만 if조건은 항상 true로 실행됩니다. 왜?

다음은 몇 가지 코드입니다.

Sourcesystem="ABC"

if [ "$Sourcesystem" -eq 'XYZ' ]; then
    echo "Sourcesystem Matched"
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;

echo Sourcesystem Value is  $Sourcesystem ;

이것은 작동하지 않습니다.

Sourcesystem="ABC"

if [ 'XYZ' -eq "$Sourcesystem" ]; then
    echo "Sourcesystem Matched"
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;

echo Sourcesystem Value is  $Sourcesystem ;

둘째, 이것을 NULL 또는 빈 문자열과 일치시킬 수 있습니까?



답변

=문자열 비교 에는 연산자를 사용해야합니다 .

Sourcesystem="ABC"

if [ "$Sourcesystem" = "XYZ" ]; then
    echo "Sourcesystem Matched"
else
    echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;

man test-z빈 문자열과 일치 하는 데 사용한다고 말합니다 .


답변

-eq정수를 비교하는 데 사용됩니다. =대신 사용하십시오 .


답변

eq는 정수를 비교하는 데 사용되며 대신 ‘=’를 사용합니다. 예 :

if [ 'AAA' = 'ABC' ];
then
    echo "the same"
else
    echo "not the same"
fi

행운을 빕니다


답변

나는 똑같은 문제가 있었다.

if [ 'xyz' = 'abc' ];
then
echo "match"
fi

공백을 확인하십시오. 이 경우 공백을 사용하는 것이 중요합니다.= 부호 .

기타 비교 연산자 “를 확인하십시오 .


답변

-eq정수를 비교하기위한 쉘 비교 연산자입니다. 문자열을 비교하려면 =.


답변

-eq수학적 비교 연산자입니다. 나는에 의존, 문자열 비교를 위해 그것을 사용한 적이 ==!=비교하십시오.

if [ 'XYZ' == 'ABC' ]; then   # Double equal to will work in Linux but not on HPUX boxes it should be if [ 'XYZ' = 'ABC' ] which will work on both
  echo "Match"
else
  echo "No Match"
fi


답변

내가 테스트 한 4 개의 셸 중 및 ABC -eq XYZ에 대한 test기본 제공 에서 true로 평가됩니다 . 표현은 거짓 아래로 평가 과의 내장 명령 과 . 으로 하고 , 문자열을 수치로 변환 및 IMO가 모두 0이기 때문에이다위한 내장 매크로의 동작과 동일 하고 정확하지만 대한 사양은 이것에 모호한. zshksh/usr/bin/testdashbashkshzshkshzshtest