Почему мое сравнение строк bash двух одинаковых строк всегда ложно?
Я пытаюсь написать простой маленький скрипт для запроса 3g-соединения, и если соединение упало, инициируйте повторное подключение.
моя проблема заключается в проверке вывода команды - две, казалось бы, равные строки не оцениваются как равные. Я уверен, что где-то здесь есть ошибка noob!
#!/bin/bash
echo "Checking connection"
a="Not connected."
b=$(./sakis3g status --console)
if [[ "$a"!="$b" ]]; then
echo "Strings not equal:"
echo "$a"
echo "$b"
else
echo "Strings equal!!"
fi
вывод при запуске:
user@mypc:~$ ./test_3g.sh
Checking connection
Strings not equal:
Not connected.
Not connected.
при работе ./test_3g.sh | cat -A
:
user@mypc:~$ ./test_3g.sh | cat -A
Checking connection$
Strings not equal:$
Not connected.$
Not connected.$
3 ответов
вы должны поместить пробелы вокруг операторов:
if [[ "$a" != "$b" ]]; then ...
без пробелов вы получаете одну строку, эквивалентную "$a!=$b"
. И тестирование только строки возвращает true, если эта строка не пуста...
использовать case/esac
. Если вам не придется возиться с if/else
' s nitty песчаные нюансы
case "$a" in
"$b" ) echo "ok";;
*) echo "not ok";;
esac
вероятно, программа sakis3g печатает сообщение в stderr вместо stdout. В этом случае вы сравниваете свое сообщение с пустой строкой. Попробуйте перенаправить stderr в stdout:
b=$(./sakis3g status --console 2>&1)