Hallo nochmals, 2006-06-07 17:47 +0300, K. Elo:
Also mit return wird nur die Schleife (while) beendet und man landet auf die Zeile nach 'done'. Die Erklärung dafür scheint zu sein, dass - AFAIK - pipes als "child processes" ausgeführt werden, so dass die while-Schleife als child-Prozess ausgeführt und entsprechend mit dem ersten 'return' beendet wird.
Ich habe eine Expertin gefragt und sie bestätigte diese Annahme: die pipe führt dazu, dass die Schleife in einem Subshell ausgeführt wird, so dass mit 'return 1' nur aus dem Subshell rausgesprungen wird. Du merkst es auch so, wenn Du am Anfang der Funktion eine Integer-Variable deklariest (z.B. RET_VAL=0) und diese Variable vor 'return 1' auf 1 setzt. Wenn Du jetzt 'echo "$RET_VAL"' zwischen 'done' und 'return 0' einfügst, kommt _immer_ 0 aus. Wie Du sicherlich weißt, können Subshells nur ihre eigenen Variablen ändern, nicht aber die des Shells, das das Subshell gestartet hat. Gruß Kimmo -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com