Vorsicht mit IFS auf Bash-Ebene wenn du nicht ganz genau verstanden hast, was du damit tust, kannst du dir mehr Probleme in die Scripte reinholen als du damit lösen kannst.
Problem ist recht einfach zu verstehen wenn man sich die Zeichenketten mal genauer anschaut.
Code: Alles auswählen
robi@ULTRA-01:~> RESULT=$(curl -Is http://www.google.de | head -1)
robi@ULTRA-01:~> CORRECT_RESULT="HTTP/1.1 200 OK"
robi@ULTRA-01:~> echo $RESULT | hexdump -C
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d |HTTP/1.1 200 OK.|
00000010 0a
Zeichen 16 ist
0x0d; Zeichen 17 ist
0x0a |.|
Code: Alles auswählen
robi@ULTRA-01:~> echo $CORRECT_RESULT | hexdump -C
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0a |HTTP/1.1 200 OK.|
00000010
Zeichen 16 ist
0x0a; Zeichen 17 gibt es nicht.
Der Unterschied ist also ganz klar wie oben schon erwähnt im Zeilenende (Zeilensprung) zu finden, der hier einmal im DOS/Mac Format und einmal im Unix-Format vorliegt.
entweder muss das "
0x0d 0x0a" gegen "
0x0a" getauscht werden oder das "
0x0a" gegen "
0x0d 0x0a" um die Strings richtig vergleichen zu können
Wobei man jedoch bedenken muss, das das 0x0a (das Ende der Zeile) schon nicht mehr Bestandteil des Strings ist und in der Variable auch nicht vorhanden ist.
Möglichkeiten gibt es ganz viele., hier mal ein paar in der Pipe geschrieben, hexdump am ende, damit man besser sieht was genau passiert.
Code: Alles auswählen
Bash : (Beispiel schon oben genannt.) ${RESULT:0:-1} (Bedeutet: Ausschnitt 1. bis Vorletztes Zeichen)
: echo ${RESULT%?} | hexdump -C #letztes Zeichen wegschneiden
tr : echo $RESULT | tr -d "\r" | hexdump -C
cut : echo $RESULT | cut -d $(echo -en "\r") -f 1 | hexdump -C
sed : echo $RESULT | sed 's/\r//g' | hexdump -C # 0x0d wird weggeschnitten
: echo $RESULT | sed 's/\(.*\)./\1/'| hexdump -C # letztes Zeichen wird weggeschnitten
awk : echo $RESULT | awk '{gsub(/\r/,"");print}' | hexdump -C
dos2unix : echo $RESULT | dos2unix | hexdump -C
......
Anderes herum geht das genauso, eben am Ende noch ein "\r" Anhängen oder unix2dos konvertieren.
Das macht sich auch ganz gut gleich bei der Erstellung der Variable zu erledigen. zB.
Dann kann man sich im Scriptverlauf sparen die ganzen Ergebnisse jedesmal erst noch umwandeln zu müssen.
robi