Сравнение строк на равенство в ksh - PullRequest
6 голосов
/ 02 ноября 2009

Я тестирую с помощью сценария оболочки ниже:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

Выдает эту ошибку в условии if:

: ==: unknown test operator

действительно ли == не правильный синтаксис для использования? Я работаю в командной строке, как показано ниже

test_lsn_2 INSTANCE=ALL

Может кто-нибудь предложить решение. Спасибо.

Ответы [ 5 ]

16 голосов
/ 02 ноября 2009

Для сравнения строк вам нужен одинарный =, а не двойной. И вы должны поместить его в двойные кавычки, если строка пуста:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi
6 голосов
/ 02 ноября 2009

Я вижу, что вы используете ksh, но вы добавили bash в качестве тега, вы принимаете ответ, связанный с bash? Используя bash, вы можете сделать это следующими способами:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

Подробнее об этом см. здесь .

4 голосов
/ 02 ноября 2009

Попробуйте

if [ "$instance" = "ALL" ]; then

Было несколько ошибок:

  1. Вам нужны двойные кавычки вокруг переменной для защиты от (маловероятного) случая, когда она пуста. В этом случае оболочка увидит if [ = "ALL" ]; then, что недопустимо.

  2. Равен в оболочке использует один = (нет способа присвоить значение в if в оболочке).

2 голосов
/ 02 ноября 2009
totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac
0 голосов
/ 02 ноября 2009

Я уже ответил на аналогичный вопрос. В основном, вам нужен оператор = (не ==), и синтаксис нарушается, если ваша переменная пуста (то есть становится if [ = ALL]). Посмотрите другой ответ для деталей.

...