Eingabe vom Benutzer lesen: read

Mit dem Kommando read kann man vom Benutzer Eingaben (als Text) lesen. Mit jedem read wir genau eine Zeile gelesen. Es wird also alles gelesen, was der Benutzer eingibt, bis zum abschließenden line feed (Enter- oder Return-Taste).

Hinter dem read gibt man eine oder mehrere Variablen, die mit der Eingabe gefüllt werden. Das erste Wort der Eingabe wird der ersten angegeben Variablen zugewiesen, das zweite Wort der zweiten Variablen, und so weiter. Wenn mehr Variablen angegeben sind, als die Eingabe Wörter enthält, dann sind die überzähligen Variablen leer. Wenn die Eingabe mehr Wörter enthält, als Variablen angegeben sind, dann erhält die letzte Variable den ganzen Reste der Eingabezeile.

Als Trennzeichen der eingegebenen Wörter werden alle Zeichen verstanden, die in der Variablen IFS abgelegt sind (normalerweise das Leerzeichen).

Wenn man gar keine Variablen angibt, dann wird die eingegebene Zeile in der Variablen REPLY gespeichert.

Beispiel 22   Einlesen von drei Werten in drei Variablen:
klaus@aw35:~ > read a b c
eins 222 drei
klaus@aw35:~ > echo $a
eins
klaus@aw35:~ > echo $b
222
klaus@aw35:~ > echo $c
drei

Beispiel 23   Einlesen eines Werts in drei Variablen:
klaus@aw35:~ > read a b c
eins
klaus@aw35:~ > echo $a
eins
klaus@aw35:~ > echo $b

klaus@aw35:~ > echo $c

Beispiel 24   Einlesen von fünf Werten in drei Variablen:
klaus@aw35:~ > read a b c
eins zwei 333 Issos Keilerei
klaus@aw35:~ > echo $a
eins
klaus@aw35:~ > echo $b
zwei
klaus@aw35:~ > echo $c
333 Issos Keilerei

Mit der Option -pprompt kann man einen Eingabeprompt angeben, der angezeigt werden soll.

Beispiel 25   Einlesen von drei Werten in drei Variablen (mit Eingabeprompt Bitte drei Werte: ):
klaus@aw35:~ > read -p "Bitte drei Werte: " a b c
Bitte drei Werte: eins 222 drei
klaus@aw35:~ > echo $a
eins
klaus@aw35:~ > echo $b
222
klaus@aw35:~ > echo $c
drei

Beispiel 26   Einlesen einer Zeile in die Variable REPLY:
klaus@aw35:~ > read -p "Bitte Ihre Meinung: "
Bitte Ihre Meinung: ich spende gern
klaus@aw35:~ > echo $REPLY
ich spende gern

Beispiel 27   Mit read kann man natürlich aus einer Datei lesen, indem man die Standardeingabe umlenkt:
read a <dateiname
liest die erste Zeile der angegebenen Datei in die Variable a.

Will man mehrere Zeilen lesen, dann muß man etwas mitdenken. Denn so:

read a <dateiname
read b <dateiname
read c <dateiname
liest man nicht etwa die ersten drei Zeilen nach ab, b, und c. Vielmehr wird mit jedem read die Datei neu geöffnet, und alle drei Variablen bekommen den Inhalt der ersten Zeile.
Schreibt man dagegen:
{ read a; read b; read c; }<dateiname
dann klappt's auch mit dem Nachbarn: a erhält die erste Zeile, b die zweite, und c die dritte.

Nur bash: Wenn man die Option -e benutzt, dann wird für die Eingabe der readline-Mechanismus genutzt, das heißt der Benutzer kann sich mit den Pfeiltasten durch die letzten Eingaben blättern, oder mit Strg-r (^R) rückwärts beziehungsweise mit Strg-s (^R) vorwärts in der letzten Eingabe suchen (wie in der Eingabezeile der bash sonst auch.)

AnyWare@Wachtler.de