Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 11. Dez 2018 18:37

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 12. Mai 2006 15:54 
Hallo,

folgendes Shell-Skript
Code:
#!/bin/sh
testseq="12 30 14 43 394 2 2 18 3459 39"
testsort=$(echo "[2, 2, 12, 14, 18, 30, 39, 43, 394, 3459]" | sed -e 's/\[//' -e 's/\]//' -e 's/, / /g')
testsort2=$(echo $testseq | tr ' ' '\n' | sort -n | tr '\n' ' ')
echo $testsort
echo $testsort2
if [ "$testsort" = "$testsort2" ]; then
 echo "gleich"
else
 echo "ungleich"
fi
# Jetzt wird's merkwürdig...
testsort=$(echo $testsort   | tr ' ' 'L' | tr 'L' ' ')
testsort2=$(echo $testsort2 | tr ' ' 'L' | tr 'L' ' ')
if [ "$testsort" = "$testsort2" ]; then
 echo "gleich"
else
 echo "ungleich"
fi
liefert bei mir die Ausgabe

stefan@localhost ~/tmp $ ./cmptest.sh
2 2 12 14 18 30 39 43 394 3459
2 2 12 14 18 30 39 43 394 3459
ungleich
gleich

Wie kann das sein? Wie man anhand der Ausgabe sieht, sind die Zeichenketten bereits
vor dem ersten Vergleich gleich. Und die Anweisungen
Code:
testsort=$(echo $testsort   | tr ' ' 'L' | tr 'L' ' ')
testsort2=$(echo $testsort2 | tr ' ' 'L' | tr 'L' ' ')
[\code]
bewirken ja eigentlich nicht's, trotzdem sind die Zeichenketten danach gleich.

Kann mir das bitte jemand erklären??

Danke, Stefan

PS: Hab gerade versucht ein Skript zu schreiben, was die Ausgaben zweier Programme
vergleicht, und dabie bin ich auf dieses merkwürdige verhalten gestoßen.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Mai 2006 16:36 
Offline

Registriert: 03. Mär 2006 23:16
Beiträge: 430
Hallo,

ersetzt Du
Code:
...
echo $testsort
echo $testsort2 
...
durch
Code:
...
echo _$testsort_
echo _$testsort2_
...
dann siehst du, dass bei testsort2 noch ein angehängtes Leerzeichen im String ist.
Bei der Bearbeitung mit 'tr..tr..' verschwindet dieses durch Wiedereinlesen in die Variable,


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Mai 2006 18:12 
Danke für die Antwort

Wenn ich es mit
Code:
echo {$testsort}
echo {$testsort2}
ausgebe, ist tatsächlich ein Leerzeichen mehr zu sehen. Aber wenn ich anschließend
Code:
echo $(echo $testsort | tr ' ' 'L')
echo $(echo $testsort2 | tr ' ' 'L')
aufrufe, dann ersetzt er dieses Leerzeichen nicht mit einem L. Wieso, ich verstehe dieses verhalten nicht, würde es aber gerne verstehen?

PS: Mit
Code:
echo _$testsort_
echo _$testsort2_ 
klappt es bei mir übrigens nicht, wahrscheinlich weil er denkt, dass testsort_ und testsort2_
Variablen sind. Wieso klappt das bei Dir? Gibt es da nicht irgendwelche Festlegungen?

stefan@localhost ~ $ sh --version
GNU bash, version 3.00.16(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Mai 2006 19:12 
Offline

Registriert: 03. Mär 2006 23:16
Beiträge: 430
Guten Abend,

"_": ich habe beim Versuchen mit einem "." gearbeitet, beim Posten allerdings nur an die bessere Sichtbarkeit dieses Zeichens gedacht, nicht dass es zur Variablen hinzugefügt wird. Sorry.
Code:
echo $(echo $testsort2 | tr ' ' 'L') 
beim 'echo' erscheint das Zeichen, beim Pipen verschwindet es als wenn Du einfach mehrere eintippen würdest:
Code:
echo $(echo $testsort2           | tr ' ' 'L') 
Das Verhalten ändert sich, wenn du quotes "" um die Variable packst:
Code:
echo $(echo "$testsort2" | tr ' ' 'L') 
dann wird auch das Leerzeichen gepiped.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12. Mai 2006 19:48 
Achso, alles klar, weil die Bash ja erstmal die Variable auswertet und ihren Wert einfach einsetzt als würde ich es "normal" eingetippt haben.

Dankeschön, hab's verstanden! :D


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de