Ich habe gelesen, dass die Verwendung von "for" keine gute Möglichkeit ist, Zeilen in bash zu lesen. Viele Leute sagen, dies sei ungeschickt und bestenfalls ineffizient und scheitere in vielen Fällen.
Ich würde gerne wissen, wie man Zeilen in Bash am besten liest. Vielen Dank.
Zum Beispiel:
$ for i in $(<afile); do echo "$i"; done
Antworten:
Ich bin mir nicht sicher, was genau du meinst, aber ich gehe davon aus, dass du darüber sprichst
for line in $(cat file); do
* und ähnliche Konstrukte. Dies ist ineffizient, da bash eine Subshell erzeugen und ausführen musscat
, lesencat
Ausgabe von - die gesamte Datei - in Erinnerung, analysieren Sie es (das ist der langsamste Teil ), erst dann über alle Daten iterieren. Unzuverlässig, weil bash funktioniert Wortspaltung auf die Daten - nicht nur auf Zeilenumbrüche aufgeteilt, sondern auch auf alles in $ IFS (Leerzeichen, Tabulatoren ...)(Wenn du benutzt
$(<...)
anstatt$(cat ...)
Sie sparen unter Linux zwei Millisekunden, aber alle anderen Nachteile bleiben bestehen.)Eine viel bessere Option ist die Verwendung
read
in einemwhile
Schleife:Oder aus einem Programm:
Dies liest nur so viel wie nötig, führt keine unnötige Verarbeitung durch, sondern ermöglicht eine benutzerdefinierte Feldaufteilung und ist bei großen Dateien um ein Vielfaches schneller und ressourcenschonender.
Siehe auch:
quelle