Abbruchbedingung While Schleife (bash)

Guten Tag,

Ich habe gerade bash scripting und die folgende Zeile.

ls | while read i; do echo „Line: $i“; done

Die Frage, die ich beantworten muss ist, wo in der Zeile die Abbruchbedingung steckt…

Ich habe es beim Durchlesen so verstanden, dass echo $? den Rückgabewert des letzten Kommandos (also read) zurück gibt und dieser ist null.

Gehe ich jetzt also richtig in der Annahme, dass read eine 0 zurückgibt, wenn vom Kommando „ls“ keine Dateinamen mehr eingelesen werden und diese 0 als Abbruchbedingung gilt?

MFG
Rock

Hallo,

ls | while read i; do echo „Line: $i“; done

Ich habe es beim Durchlesen so verstanden, dass echo $? den
Rückgabewert des letzten Kommandos (also read) zurück gibt und
dieser ist null.

Jein, den Rückgabewert (return code) des letzten ausgeführten Kommandos findet man in der Variable $?. Dieser kann null sein (dann war das Kommando erfolgreich) oder auch nicht (damit meldet das Kommando üblicherweise einen Fehler/ein Scheitern).

Gehe ich jetzt also richtig in der Annahme, dass read eine 0
zurückgibt, wenn vom Kommando „ls“ keine Dateinamen mehr
eingelesen werden und diese 0 als Abbruchbedingung gilt?

Nein, aber vielleicht verwechselt du es nur: read gibt 0 zurück, wenn es erfolgreich eine Zeile lesen konnte. In dem Fall ist die Bedingung der while-Schleife erfüllt, die Zeile wird verarbeitet und die nächste Zeile gelesen. Erst wenn read einen Rückgabewert ungleich 0 hat, wird die Schleife beendet. Ein Rückgabewert von 0 bedeutet in der Bash immer „wahr“, andere Rückgabewerte „falsch“.

Andreas

So jetzt hab ich mehr Zeit…

Hallo Andreas. Danke für deine Antwort.

Nein, ich hatte nichts verwechselt, sondern bin einfach von was falschem ausgegangen. Ich dachte dabei eher an die Programmiersprache C in der hinter Strings eine Null gesetzt wird, damit gekennzeichnet wird, wann ein String zu Ende ist.

Ich ging hier ebenfalls von einem Rückgabewert 0 aus, der in diesem Fall dann allerdings eine andere Aufgabe übernimmt…

Nochmals Danke…