Home   Profil   Fun
#72 Linux  07.06.2009

Der internal field separator IFS


Anhand einer For-Schleife kann man den IFS erklären. Wird eine solche Schleife ausgeführt erhält das Kommando eine Liste. Diese Liste wird in einzelne Element gesplittet. Entsprechend werden dann die Kommandos innerhalb der Schleife für jedes Element der Liste ausgeführt. Man kann nun steuern anhand welches Trennungszeichens diese Liste aufgespalten wird. Dies geschieht mit der Umgebungsvariablen IFS. Defaultmäßig wird bei Leerzeichen, Tabs und newline gesplittet.
Hier ein Beispiel für eine Trennung anhand des Doppelpunktes.
#!/bin/bash

IFS=':'
LINE='a:b:c'

for field in $LINE
do
  echo $field
done

exit 0

Dieses Beispiel trennt also beim Doppelpunkt, sodass das Ergebnis wie folgt aussieht:
a
b
c

Das zweite Beispiel trennt mit newline.
#!/bin/bash

IFS='
'

for field in `cat ./list.txt`
do
  echo $field
done

exit 0

Nehmen wir an die Datei list.txt enthielte diese Zeilen:
a
b bb
c

Dann sieht der Output erwartungsgemäß so aus.
a
b bb
c

Wie bereits erwähnt wird die Liste defaultmäßig bei Leerzeichen UND Tabs UND newlines getrennt.
Ohne das explizite Setzen des IFS auf (nur)newline wäre der Output dieser:
a
b
bb
c