
Мне нужно сравнить две переменные с помощью ipv6, чтобы были строки и целые числа вместе.
Я попробовал сделать так, как показано ниже:
if [[ "$ipvsrc" -eq "$ipvdst" ]];
then echo -e "Value OK"; fi
Вывод ошибки:
line 7: [[: 2a00: value too great for base (error token is "2a00")
Затем:
if [ $ipvsrc -eq $ipvdst];
then echo -e "Value OK"; fi
Вывод ошибки:
line 7: [: 2a00:0da9:000a:2010:1fc:0:2174:1951: integer expression expected
Затем:
if [[ "$ipvsrc" == "$ipvdst" ]];
then echo -e "Value OK";
fi
выход: нет
Переменные устанавливаются следующим образом:
ipvsrc=$(cat config_src | grep ipvsrc |grep -v localhost | cut -d '=' -f2);
ipvdst=$(cat config_dst | grep -i ipvdst | cut -d '=' -f2);
Есть ли у вас какие-нибудь подсказки, как получить желаемый результат? Большое спасибо, ура!
решение1
Ваш последний пример верен (при условии, что вы используете оболочку вроде bash
или , ksh93
которая понимает [[ ... ]]
, но, похоже, вы это понимаете):
if [[ "$ipvsrc" == "$ipvdst" ]]; then
echo "Value OK";
fi
Две сравниваемые вами переменные содержат строки, поэтому заключение их в кавычки и использование ==
является правильным.
Причина, по которой вы не получаете никаких выходных данных, вероятно, заключается в том, что сравнение дает результат false, то есть две строки не идентичны.
К сожалению, я не знаю содержимого config_{src,dst}
, поэтому не могу сказать, какими могут быть значения этих двух переменных, или должны ли они быть одинаковыми или отличаться друг от друга.