Python eine praktische Sprache-Funktion "für-else" (ähnlich "während-else") genannt hat, die wie folgt aussieht:Imitieren von den Python "für-else" konstruieren
for obj in my_list:
if obj == target:
break
else: # note: this else is attached to the for, not the if
print "nothing matched", target, "in the list"
Wesentlichen die else
wird übersprungen, wenn die Schleife unterbrochen wird, wird aber ausgeführt, wenn die Schleife über einen Bedingungsfehler (für while
) oder das Ende der Iteration (für for
) beendet wurde.
Gibt es eine Möglichkeit, dies in bash
zu tun? Der nächstgelegene ich denken kann, ist eine Flag-Variable zu verwenden:
flag=false
for i in x y z; do
if [ condition $i ]; then
flag=true
break
fi
done
if ! $flag; then
echo "nothing in the list fulfilled the condition"
fi
die eher ausführlicher ist.
Kurz und gut. Ich mag das. – nneonneo
Großer Fehler! Die Liste von 'x y z' wird niemals zu 'y z' wenn' x' falsch ist! @nneonneo wie kannst du das akzeptieren ?! –
Hier ist, was ich verwende: '(für i in x y z; tun [Zustand $ i] & & echo" Bedingung $ i wahr "& & exit; getan) && echo" Eine Übereinstimmung gefunden "|| echo "Habe keine Übereinstimmung gefunden" '. Beachten Sie die Verwendung von '&& exit' anstelle von' || exit', was der Schlüssel ist, um es fortzusetzen, wenn "x" falsch ist. – nneonneo