Im Folgenden wird eine Datei gelesen, die zeilenweise als Argument übergeben wird:
while IFS= read -r line; do
echo "Text read from file: $line"
done < my_filename.txt
Dies ist das Standardformular zum Lesen von Zeilen aus einer Datei in einer Schleife. Erläuterung:
IFS=
(oder IFS=''
) verhindert, dass führende / nachfolgende Leerzeichen abgeschnitten werden.
-r
verhindert, dass Backslash-Escapezeichen interpretiert werden.
Oder Sie können es in ein Bash-Datei-Hilfsskript einfügen, Beispielinhalt:
#!/bin/bash
while IFS= read -r line; do
echo "Text read from file: $line"
done < "$1"
Wenn das oben Gesagte in einem Skript mit Dateiname gespeichert ist readfile
, kann es wie folgt ausgeführt werden:
chmod +x readfile
./readfile filename.txt
Wenn die Datei keine Standard-POSIX-Textdatei ist (= nicht durch ein Zeilenumbruchzeichen abgeschlossen), kann die Schleife so geändert werden, dass nachfolgende Teilzeilen verarbeitet werden:
while IFS= read -r line || [[ -n "$line" ]]; do
echo "Text read from file: $line"
done < "$1"
|| [[ -n $line ]]
Verhindert hier, dass die letzte Zeile ignoriert wird, wenn sie nicht mit a endet \n
(da read
ein Exit-Code ungleich Null zurückgegeben wird, wenn EOF auftritt).
Wenn die Befehle in der Schleife auch aus der Standardeingabe gelesen werden, kann der von verwendete Dateideskriptor read
auf etwas anderes geändert werden (vermeiden Sie die Standarddateideskriptoren ), z.
while IFS= read -r -u3 line; do
echo "Text read from file: $line"
done 3< "$1"
(Nicht-Bash-Muscheln wissen es möglicherweise nicht read -u3
; verwenden Sie sie read <&3
stattdessen.)