(read a line from standard input)
Das in die POSIX-Shell sh eingebaute Kommando read liest eine Zeile von der Standard-Eingabe. Die gelesenen Argumente der Eingabezeile weist read den beim Aufruf angegebenen Shell-Variablen der Reihe nach als Wert zu.
Als Argument-Trennzeichen erkennt read nur die Zeichen, die der Shell-Variablen IFS zugewiesen sind. Standardmäßig sind das Leer-, Tabulatorzeichen und Neue-Zeile-Zeichen.
Wenn read in einer Shell-Prozedur steht und die Standard-Eingabe nicht umgelenkt ist, hält read die Prozedur an und liest Ihre Eingaben von der Standard-Eingabe. Sobald Sie ein Neue-Zeile-Zeichen eingeben, wird die Prozedur fortgesetzt (siehe auch Beispiele auf "read Argumente von der Standard-Eingabe lesen und Shell- Variablen zuweisen (read a line from standard input)").
Syntax
read
[-option][ name?abfrage][ name]... |
option
Statt von der Standard-Eingabe wird von der Pipeline zu dem, durch |& erzeugten Prozess gelesen. Bei Dateiende von der Pipeline wird so bereinigt, dass durch |& ein neuer Prozess erzeugt werden kann.
Im Raw-Modus hat der Gegenschrägstrich \ am Zeilenende keine Sonderfunktion, d.h. die Zeile wird nicht fortgesetzt.
Die Eingabe wird als Kommando in die History-Datei geschrieben.
Die einstellige dateikennzahl wird statt der Standard-Eingabe zum Lesen verwendet. Die Dateikennzahl kann mit dem eingebauten Kommando exec geöffnet werden. Der Standardwert für dateikennzahl ist 0.
Name der Shell-Variablen, der das entsprechende Argument aus der Eingabe-Zeile zugewiesen wird: Dem ersten Namen wird das erste Argument zugewiesen, dem zweiten Namen das zweite, usw., wobei dem letzten Namen der Rest der Eingabezeile zugewiesen wird. Die Namen von Shell-Variablen müssen mit einem Buchstaben oder einem Unterstrich _ beginnen und dürfen nur Buchstaben, Ziffern und _ enthalten. Überzählige Argumente in der Eingabe-Zeile werden der letzten Variablen des Kommandos read zugewiesen. Überzähligen Variablen des Kommandos read wird die leere Zeichenkette zugewiesen. Enthält das erste Argument ein ?, wird der Rest des Wortes als ein Bereitzeichen auf die Standard-Fehlerausgabe geschrieben. name nicht angegeben: |
Endestatus
0 | read wurde erfolgreich ausgeführt |
>0 | read hat keine Eingabe erhalten, also nur Datei-Ende (EOF) gelesen oder Fehler. |
Fehler
Sie haben read ohne Argumente aufgerufen. |
Variable
IFS Argument-Trennzeichen. Standardmäßig sind der Variablen IFS Leerzeichen, Tabulatorzeichen und Neue-Zeile-Zeichen zugewiesen. PS2 Bereitzeichen, das die POSIX-Shell auf Standard-Fehlerausgabe schreibt, wenn eine Zeile mit einem abschließenden Gegenschrägstrich \ gelesen wird und die Option -r nicht angegeben war oder wenn ein Here-Dokument nicht nach einem Neue-Zeile-Zeichen beendet wird. |
Internationale Umgebung
Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos read: LANG Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden. LC_ALL Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen. LC_CTYPE Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung. LC_MESSAGES Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden. NLSPATH Legt den Pfad der Meldungsdateien für LC_MESSAGES fest. |
Beispiel 1
Das Kommando read wird in der Shell-Prozedur readtest aufgerufen. Diese Shell-Prozedur hat folgenden Inhalt: : Aufruf mit sh readtest, wird fuer Eingabe angehalten echo Bitte geben Sie Kunden-Namen ein: read kunde1 kunde2 kunde3 if [ -z "$kunde1" ] then exit 5 else echo Kunde1: $kunde1 echo Kunde2: $kunde2 echo Kunde3: $kunde3 fi Die Shell-Prozedur readtest wird aufgerufen:
Nach dem Aufruf gibt die Shell-Prozedur die Meldung des Kommandos echo aus und startet read. Die Prozedur hält an, und read liest die eingegebenen Namen der Kunden. Das Neue-Zeile-Zeichen beendet für read die Eingabe-Zeile. Der dritten Variablen kunde3 weist read zwei Namen zu, da die Eingabe-Zeile vier Argumente enthielt. |
Beispiel 2
Das Kommando read liest die erste Zeile aus einer Datei:
In diesem Fall liest read auch bei wiederholtem Aufruf immer wieder die erste Zeile der Datei /etc/group. |
Beispiel 3
In der folgenden Shell-Prozedur soll das Kommando read nacheinander die Zeilen einer Datei lesen: : Aufruf mit sh lies exec </etc/group for i in 1 2 3 4 5 6 do read satz$i eval echo satz$i: \$satz$i done Mit dem eingebauten sh-Kommando exec wird in der Shell-Prozedur lies die Standard-Eingabefür das nachfolgende Kommando read umgelenkt auf die Datei /etc/group. Wegen der for-Schleife wird read in der Prozedur siebenmal aufgerufen. Jeder Aufruf positioniert den Lesezeiger in /etc/group auf die nächste Zeile. Deshalb gibt echo die ersten sieben Zeilen der Datei /etc/group nacheinander aus:
Die Angabe \$satz$i kann die Shell nur dann richtig auswerten, wenn sie die echo-Kommandozeile zweimal interpretiert; deshalb der Aufruf mit eval. Beim erstenmal interpretiert die Shell nur $i, denn das erste Dollarzeichen $ ist durch den Gegenschrägstrich \ entwertet. Beim zweitenmal interpretiert die Shell $satz[1-7]. |
Siehe auch
exec |