Сравнение строк для равенства в KSH
Вопрос
Я тестирую с помощью скрипта оболочки ниже:
#!/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
Может ли кто -нибудь, пожалуйста, предложить решение. Спасибо.
Решение
Я вижу, что вы используете KSH, но вы добавили Bash в качестве тега, принимаете ли вы ответ, связанный с Bash? Используя Bash, вы можете сделать это таким образом:
if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]
Видеть здесь Для получения дополнительной информации об этом.
Другие советы
Для сравнения строк вам нужен один = не двойник. И вы должны поместить его в двойные кавычки на случай, если строка пуста:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
Пытаться
if [ "$instance" = "ALL" ]; then
Было несколько ошибок:
Вам нужны двойные цитаты вокруг переменной, чтобы защитить от (маловероятного) случая, что она пуста. В этом случае оболочка увидит
if [ = "ALL" ]; then
что недопустимо.Равно в оболочке используется один
=
(нет способа назначить значение вif
в оболочке).
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
Я уже ответил на аналогичный вопрос. В основном необходимый оператор, который вам нужен =
(нет ==
) и синтаксис ломается, если ваша переменная пуста (т.е. if [ = ALL]
) Посмотри на другой ответ Для деталей.