Wenn wir eine Datei mit folgendem Inhalt haben:
klaus rechner1 martin rechner3 dieter rechner7
Und wir lassen diese von folgendem Script einlesen und wieder ausgeben (was natürlich recht sinnfrei ist, hier aber nur zur Veranschaulichung dienen soll):
#!/bin/bash for ZEILE in `cat daten` do echo $ZEILE done
Dann kommt sowas raus:
klaus rechner1 martin rechner3 dieter rechner7
Durch die Leerzeichen werden die Daten-Zeilen zerteilt. Damit das nicht passiert, setzt man den „Input Field Separator“ $IFS auf ‚
‚ (Standard ist ein “
„):
#!/bin/bash Newline=$' ' IFS=$Newline for ZEILE in `cat daten` do echo $ZEILE done IFS=
Dann sieht das Ergebnis wie erwartet und gewünscht aus:
klaus rechner1 martin rechner3 dieter rechner7
Boah, Hammer!
Vielen Dank! War bis grade eben voll am Verzweifeln. Dank deiner Hilfe kam ich endlich weiter! Danke!
Wie sieht das denn aus wenn ich eine Variable mit Leerzeichen in einer for Schleife verarbeiten möchte ? Ich habe eine etwas unkonventionelle Lösung : beim Einlesen einer Datei in die Variable XYZ ersetzte ich mit Hilfe von tr alle Leerzeichnen durch ein Zeichen welches in der einzulesenden Datei nicht vorkommt, z.B. § . Die Variable ABC kann ich nun mit der for Schleife zeilenweise verarbeiten und jeder weitere Zugriff auf die Datei ( und SSD/HDD ) kann somit vermieden werden. Nach dem Einlesen der Variable durch die for Schleife ersetze ich wieder mit tr das „Umwegzeichen“ ( in diesem Fall § ) mit Leerzeichen.
Der Vorteil gegenüber dem Auslesen einer Datei ist die Geschwindigkeit, da die Variablen im Speicher vorgehalten werden und nicht immer auf die SSD/HDD zugegriffen werden muss.
Auf eine Methode wie man dennoch eine Variable mit Leerzeichen ohne den o.g. Umweg in die for Schleife bekommt bin noch nicht gestoßen. Für Tipps wäre ich dankbar 😉
Das sollte genauso wie von mir oben beschrieben gehen. Ob man die Datei in der Schleife oder direkt in eine Variable einließt, bleibt sich doch gleich:
Ich hab’s aber nicht ausprobiert.