Warum ist mein bash-string-Vergleich von zwei identischen strings immer falsch?
Ich versuche zu schreiben, ein einfaches kleines script zum Abfragen einer 3g-Verbindung, und wenn die Verbindung gelöscht hat, startet ein Wiedereinschalten gesichert werden.
Mein problem ist bei der überprüfung der Ausgabe des Befehls - zwei scheinbar gleiche strings werden nicht als gleich bewertet. Ich bin sicher, dass es ein noob-Fehler hier irgendwo!
#!/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
Den output bei der Ausführung:
user@mypc:~$ ./test_3g.sh
Checking connection
Strings not equal:
Not connected.
Not connected.
Beim laufen ./test_3g.sh | cat -A
:
user@mypc:~$ ./test_3g.sh | cat -A
Checking connection$
Strings not equal:$
Not connected.$
Not connected.$
- Es gibt keine störenden Zeilenumbruch am Ende, richtig?
- Versuchen
./test_3g.sh | cat -A
. Wenn Ihrcat
unterstützt nicht die-A
option, versuchen./test_3g.sh | cat -v
. - Ich glaube nicht, dass es alle überflüssigen Leerzeichen, aber würde glücklich sein, korrigiert auf, der. @Keith, ich habe die Ausgabe aus dem Rohr zu Katze -Eine auf die Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen Sie Leerzeichen um Operatoren:
Ohne Leerzeichen am Ende mit einer einzigen saite, entspricht
"$a!=$b"
. Und testen einfach eine Zeichenfolge, die true zurückgibt, wenn die Zeichenfolge nicht leer ist..."Not connected.!=Not connected."
. Als bash-Ausdruck wird ein string als true behandelt, wenn Ihre Länge ist nicht null;[[ STRING ]]
entspricht[[ -n STRING]]
. (info bash
suchen für\[\[
, dann Folgen Sie den Hinweis "Bash" Bedingte Ausdrücke".)Verwenden
case/esac
. Wenn Sie nicht zu verwirren haben mitif/else
's nitty gritty NuancenWahrscheinlich sakis3g Programm drucken Nachricht auf stderr statt stdout. In diesem Fall vergleichen Sie Ihre Nachricht mit einem leeren string. Versuchen Sie zum umleiten von stderr zu stdout:
b
mit oder ohne deinen Zusatz.