Hallo,
unter Testing habe ich ein Skript das eine Textdatei zeilenweise ausliest und diese Zeile in einer Variable speichert.
Wenn die Zeile mehrere aufeinanderfolgende Leerzeichen hat werden diese in der Variable auf 1 Leerzeichen reduziert.
DATEI1 ist die Variable
DATEN_NEU1 der Pfad zur Textdatei
1. DATEI1=$(head -n 1 $DATEN_NEU1 | tail -n 1 )
2. head -n 1 $DATEN_NEU1 | tail -n 1
3. echo $DATEI1
Wenn die Zeile der Textdatei nun "Ha llo" (2 Leerzeichen) enthält,
dann gibt Zeile 2: Ha llo (2 Leerzeichen)
und Zeile 3: Ha llo (1 Leerzeichen)
aus.
Ist das ein Bug in Testing oder übersehe ich da etwas?
Habe schon alle möglichen Varianten an '"\" ... durch.
Grüße
K.
bash - Skript -> mehrere Leerzeichen in Variable
- mistersixt
- Beiträge: 6601
- Registriert: 24.09.2003 14:33:25
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: bash - Skript -> mehrere Leerzeichen in Variable
Ich vermute, das liegt am IFS, in der man page von bash steht:
Setz also mal vor Deinen Aktionen den IFS auf etwas anderes als ‘<space><tab><new‐line>, beispielsweise auf:
Und probier dann nochmal. Hier ein kleines Beispiel, was es bewirkt:
Gruss, mistersixt.
Code: Alles auswählen
IFS The Internal Field Separator that is used for word splitting
after expansion and to split lines into words with the read
builtin command. The default value is ‘‘<space><tab><new‐
line>’’.
Code: Alles auswählen
IFS=";"
Code: Alles auswählen
mars:/tmp# BLA="one two three"
mars:/tmp# for i in $BLA; do echo $i; done
one
two
three
mars:/tmp# IFS=;
mars:/tmp# for i in $BLA; do echo $i; done
one two three
mars:/tmp#
--
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
System: Debian Bookworm, 6.11.x.-x-amd64, ext4, AMD Ryzen 7 3700X, 8 x 3.8 Ghz., Radeon RX 5700 XT, 32 GB Ram, XFCE
Re: bash - Skript -> mehrere Leerzeichen in Variable
Ja, das funktioniert.
Allerdings liegt das Problem jetzt bei dem neuen IFS.
Bei der Textliste handelt es sich um Dateipfade/namen.
Welches Zeichen darf denn wohl in keinem Dateinamen vorkommen?
Allerdings liegt das Problem jetzt bei dem neuen IFS.
Bei der Textliste handelt es sich um Dateipfade/namen.
Welches Zeichen darf denn wohl in keinem Dateinamen vorkommen?
Re: bash - Skript -> mehrere Leerzeichen in Variable
hi,
Das nützt dir aber auch nichts, wenn du Pfadnamen verarbeitest.
Ich würde eher in Richtung Anführungszeichen weiterforschen.
In diesem einfachen Beispiel funktioniert's schon mal:
Dieses Verhalten ist jedenfalls kein Bug, grundsätzlich hat es sich
seit über 30 Jahren so bewährt. Der eigentliche Fehler ist die Unsitte,
Leerzeichen in Namen zu haben; ein Wort endet nunmal vor dem
nächsten Leerzeichen/TAB/Zeilenende. Ach ja, selbst Zeilenenden
sind in Dateinamen erlaubt
In Dateinamen dürfen alle Zeichen außer '/' vorkommen.klal hat geschrieben:Welches Zeichen darf denn wohl in keinem Dateinamen vorkommen?
Das nützt dir aber auch nichts, wenn du Pfadnamen verarbeitest.
Ich würde eher in Richtung Anführungszeichen weiterforschen.
In diesem einfachen Beispiel funktioniert's schon mal:
Code: Alles auswählen
DATEI1="abc 123"
echo $DATEI1
abc 123
echo "$DATEI1"
abc 123
seit über 30 Jahren so bewährt. Der eigentliche Fehler ist die Unsitte,
Leerzeichen in Namen zu haben; ein Wort endet nunmal vor dem
nächsten Leerzeichen/TAB/Zeilenende. Ach ja, selbst Zeilenenden
sind in Dateinamen erlaubt
Beware of programmers who carry screwdrivers.
Re: bash - Skript -> mehrere Leerzeichen in Variable
Jetzt habe ich das þ als Trenner genommen und hoffe, das es selten vorkommen wird ...
Danke für den IFS-Tip
Grüße
K
Danke für den IFS-Tip
Grüße
K