it-swarm.com.ru

Сравните строку, используя 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 ;

Во-вторых, можем ли мы сопоставить это с пустой или пустой строкой?

145
James Bond

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

Sourcesystem="ABC"

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

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

222
Mithrandir

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

59
Piotr Praszmo

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

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

удачи

21
Qign20

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

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

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

Проверьте " Другие операторы сравнения ".

15
Eswar Yaganti

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

8
codaddict

-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
Jason

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

3
William Pursell