Сравните строку, используя sh shell

Я использую SH shell, и я пытаюсь сравнить строку с переменным значением, но условие 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 или пустой строкой?

Ответ 1

Вы должны использовать оператор = для сравнения строк:

Sourcesystem="ABC"

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

man test говорит, что вы используете -z для соответствия для пустых строк.

Ответ 2

-eq используется для сравнения целых чисел. Вместо этого используйте =.

Ответ 3

eq используется для сравнения целых чисел, используя вместо этого '=', Пример:

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

удача

Ответ 4

У меня была такая же проблема, сделайте это

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

Обратите внимание на пробелы. Важно, чтобы вы использовали пробелы в этом случае после и перед знаком =.

Отъезд Другие операторы сравнения.

Ответ 5

-eq - это оператор сравнения оболочек для сравнения целых чисел. Для сравнения строк вам нужно использовать =.

Ответ 6

-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

Ответ 7

Из 4-х оболочек, которые я тестировал, ABC -eq XYZ оценивает значение true в test встроенном для zsh и ksh. Выражение принимает значение false в /usr/bin/test и встроенные значения для dash и bash. В ksh и zsh строки преобразуются в числовые значения и равны, так как они равны 0. IMO, поведение встроенных функций для ksh и zsh неверно, но спецификация для test на этом двусмысленно.