Der Befehl read
schlägt fehl, wenn die Eingabe nicht mit einem Zeilenumbruch abgeschlossen wird. Da das Zeilenumbruchzeichen am Ende der Datei fehlt, schlägt% code_% fehl, sodass die letzte Iteration der Schleife read
übersprungen wird.
Wenn Sie nicht sicherstellen möchten, dass Ihre Eingabedatei am Ende einen Zeilenumbruch hat, können Sie Ihre while
mit einer cat
gruppieren, um beispielsweise den Eindruck zu erwecken, dass eine Eingabe durch einen Zeilenumbruch beendet wurde so:
oder wie folgt:
%Vor%Es gibt einen nicht sehr bekannten, hässlichen Hack, um eine fehlende letzte Zeilenumbruch an einen Text-Stream anzuhängen, wenn und nur wenn es fehlt:
%Vor%Siehe diese Diskussion auf unix.stackexchange, zum Beispiel.
Dies ist eine ausführliche Lektüre für die Frage warum?
Wenn Sie keine neue Zeile am Ende einfügen möchten, können Sie dies tun:
%Vor% Oder mit grep
:
Hinweis:
Ihre Datei enthält wahrscheinlich eine neue Zeile ( \n
) in der letzten Zeile.
Sie können dies beweisen, indem Sie die Residualwerte von $a
usw. wie folgt drucken
Fix die Datei.
Außerdem sollten Sie IFS
speziell für read
wie oben gezeigt festlegen können. Und es ist auch nicht nötig, cat
der Datei zu verwenden, verwenden Sie einfach die Eingabeumleitung wie gezeigt