2017-05-14 1 views
4

Ich lerne Bash und versuche, den Unterschied zwischen diesen beiden Methoden zum Lesen von Zeilen aus einer Datei zu verstehen.Welcher ist der beste Weg, eine Schleife zu schreiben, die aus einer Datei liest?

1.

while IFS= read -r line 
do 
    echo $line 
done < "$file" 

2.

cat $file | 
while read data 
do 
    echo $i 
done 

Also im Grunde, was ich frage, bin: Ist eine von ihnen häufigen Praxis als die anderen? Gibt es Leistungsunterschiede? etc.

Gibt es noch andere Möglichkeiten, aus einer Datei zu lesen, die noch besser sind, besonders wenn es um das Lesen großer Dateien geht?

+2

See [BashFAQ/001] (http://mywiki.wooledge.org/BashFAQ/001) und [BashFAQ/024] (http: // mywiki .wooledge.org/BashFAQ/024). –

Antwort

5

Das zweite ist eine nutzlose Verwendung von Cat: http://porkmail.org/era/unix/award.html

Ich benutze die done < "$file" Form.

Nein, es gibt keinen besseren Weg in Bash. Aber einen Prozess zu beseitigen (cat) ist nett.

3

Es gibt einige Vorteile bei der ersten Methode:

  • es ist einfacher
  • es keine zusätzliche cat und Rohr
  • Verwendet die Schleife, während die zweite Methode in der aktuellen Shell läuft verwendet eine Untershell; Variablen innerhalb der Schleife ist sichtbar außerhalb

Selbst wenn die while-Schleife verbrauchen, waren die Ausgabe von einem anderen Befehl gesetzt oder geändert (durch Prozess Substitution wie unten gezeigt), ist das erste Verfahren besser, da sie die Subshell beseitigt :

while read -r line; do 
    # loop steps 
done < <(_command_) 

Siehe auch:

Verwandte Themen