Я использую 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 или пустой строкой?
Вы должны использовать оператор =
для сравнения строк:
Sourcesystem="ABC"
if [ "$Sourcesystem" = "XYZ" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
man test
говорит, что вы используете -z
для соответствия для пустых строк.
ABC
или XYZ
.
-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
оценивает значение true в test
встроенном для zsh
и ksh
. Выражение принимает значение false в /usr/bin/test
и встроенные значения для dash
и bash
. В ksh
и zsh
строки преобразуются в числовые значения и равны, так как они равны 0. IMO, поведение встроенных функций для ksh
и zsh
неверно, но спецификация для test
на этом двусмысленно.