bytegetter
Anmeldungsdatum: 2. November 2018
Beiträge: 6
|
Hallo zusammen, Ich habe hier ein Script: | if [[ $string == "wurst[frosch,1]" ]]; then
echo $string
fi
|
Das funktioniert solange ich keine eckigen Klammern nutze. Leider sind diese im Suchstring vorhanden, so dass ich irgendwie auf wurst[frosch,1] prüfen muss. Mit Backslash vor dem Klammern geht es auch nicht. Hat jemand eine Idee? Gruß,
Bytegetter
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 241
Wohnort: Aachen
|
Moin, funktioniert hier problemlos...
thomas@PC01:~$ string="wurst[frosch,1]"
thomas@PC01:~$ if [[ $string == "wurst[frosch,1]" ]];then echo $string;fi
wurst[frosch,1] Scheinbar ist deine Zeichenkette nicht wirklich identisch, nicht druckbare Zeichen enthalten?! Gruß Thomas
|
bytegetter
(Themenstarter)
Anmeldungsdatum: 2. November 2018
Beiträge: 6
|
Danke für den Hinweis. Ich habe die Ausgabe in hexdump umgeleitet, dort finde ich am Ende ein 0a hex:
| echo $call_tr_outboundtrunk"aa"
echo $call_tr_outboundtrunk | hexdump -C
|
Ergibt:
| loop[goblin,] aa
00000000 6c 6f 6f 70 5b 67 6f 62 6c 69 6e 2c 5d 0a |loop[goblin,].|
0000000e
|
Nach einem awk hätte ich kein 0a erwartet. Kann ich das 0a/LF im String vergleichen?
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 241
Wohnort: Aachen
|
bytegetter schrieb: Ich habe die Ausgabe in hexdump umgeleitet, dort finde ich am Ende ein 0a hex:
| echo $call_tr_outboundtrunk"aa"
echo $call_tr_outboundtrunk | hexdump -C
|
Den LF erzeugt der echo-Befehl selbst, wenn du den Schalter "-n" nicht angibst.
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 241
Wohnort: Aachen
|
Du kannst natürlich auch grep verwenden, um die Zeichenkette zu überprüfen. Dort musst du die eckigen Klammern dann allerdings escapen:
| if grep -q "^loop\[goblin,\]$" <<<$string;then
echo $string
fi
|
|
bytegetter
(Themenstarter)
Anmeldungsdatum: 2. November 2018
Beiträge: 6
|
Ich habe noch mal weiter getestet. Mit Asterisk wird der String gefunden:
if [[ $call_tr_outboundtrunk == "loop[goblin,]"* ]]; then Das ist aber nicht Sinn und Zweck des ganzen. Wieso wird der String nicht ohne Pattern gefunden? Bash ist für die Aufgabe eher ungeeignet, das ganze Script läuft ca. 4-6 Stunden. Da will ich alles unnötige vermeiden.
|
TK87
Anmeldungsdatum: 8. Juli 2019
Beiträge: 241
Wohnort: Aachen
|
Ich glaube ich habe dein Problem entdeckt... bytegetter schrieb: Nach einem awk hätte ich kein 0a erwartet.
Warum hängst du da am Ende den Tabstopp an? Der ist natürlich am Ende deiner Zeichenkette. Da du beim Hexdump die Zeichenkette nicht in Anführungszeichen gesetzt hast, taucht der Tabstopp dann im dump auch nicht auf. Mache noch mal:
| echo -n "$call_tr_outboundtrunk" | hexdump -C
|
sollte dann am Ende "09" auftauchen.
|
bytegetter
(Themenstarter)
Anmeldungsdatum: 2. November 2018
Beiträge: 6
|
| call_tr_outboundtrunk=$(echo $LINE | awk '{print $33}')
|
Ah, jetzt geht. Und ich such den Fehler schon seit einem Jahr beim Stringvergleich. 😉
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9574
Wohnort: Münster
|
Wenn Du wirklich nur Zeichenketten ohne Verwendung von Shell-Globs oder regulären Ausdrücken vergleichen willst, verwende den einfachen Test statt [[ … ]] : test "$a" = blablabla oder [ "$a" = blablabla ]
Unabhängig davon gilt: Wenn der Wert einer Variablen eine Zeilenschaltung oder ein anderes Sonderzeichen enthält, dann ist dieses vorher zu entfernen oder in den Test einzubeziehen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13140
|
kB schrieb: Wenn Du wirklich nur Zeichenketten ohne Verwendung von Shell-Globs oder regulären Ausdrücken vergleichen willst, verwende den einfachen Test statt [[ … ]] :
Danke dafür! Wäre auch genau meine Empfehlung.
test "$a" = blablabla oder [ "$a" = blablabla ]
Oder, da die Konstante ja Sonderzeichen beinhaltet: | [ "$string" = 'wurst[frosch,1]' ]
|
Unabhängig davon gilt: Wenn der Wert einer Variablen eine Zeilenschaltung oder ein anderes Sonderzeichen enthält, dann ist dieses vorher zu entfernen oder in den Test einzubeziehen.
Ich nehme an mit "einbeziehen" meinst Du, dass es im Vergleichswert ebenfalls auftauchen muss.
|