Linux

Systemvariable IFS

Verwendung der Systemvariablen IFS

Die Variable IFS (Internal Field Separator) in der Shell-Umgebung hat eine spezielle Bedeutung bei der Ein- und Ausgabe von Daten. Diese voreingestellten Trennzeichen der Shell dienen zur Trennung der Eingabe für den Befehl read, zur Variablen- sowie auch zur Kommando-Substitution.
Versucht man den Inhalt der Variablen mit echo auszugeben, sieht man im Regelfall nichts, da für gewöhnlich die Steuerzeichen Tabulator und Zeilenende, sowie das Leerzeichen verwendet werden.
Mit dem Kommando od kann man allerdings den Inhalt der Variablen in hexadezimaler oder ASCII-Form betrachten:

Beispiel hexadezimal
$ echo -n "$IFS" | od -x
0000000 0920 000a
0000003

Beispiel als character
$ echo -n "$IFS" | od -c
0000000      \t  \n
0000003

Die Variable IFS kann man an die eigenen Bedürfnisse anpassen, falls man doch einmal andere Trennzeichen verwenden möchte oder muss.
Möchte man z.B. bei der Eingabe von read ein Semikolon statt eines Leerzeichens als Trennzeichen verwenden, so lässt sich dies einfach erreichen:

$ BACKIFS="$IFS"
$ IFS=\;
$ echo -n "$IFS" | od -c
0000000 ;
0000001
$ read nachname vorname alter
Wolf;Jürgen;30
$ echo $vorname
Jürgen
$ echo $nachname
Wolf
$ echo $alter
30
$ IFS=$BACKIFS

Zuerst sollte man eine Sicherung der Variablen IFS vornehmen, hier im Beispiel in BACKIFS. Dieses Backup von IFS für das anschließende Wiederherstellen ist wichtiger, als dies auf den ersten Blick erscheint. Unterlässt man es, kann man sich auf das aktuelle Terminal nicht mehr verlassen, da einige Programme nur noch Unsinn fabrizieren.
Als Nächstes setzt man die Variablen IFS auf ein Semikolon (geschützt mit einem Backslash). Nach der Aktion stellt man dann den ursprünglichen Wert von IFS wieder her.