Python a une fonctionnalité de langage pratique appelée "pour-else" (de même, "tout-autre"), qui ressemble à ceci:Imitant le Python "pour-autre" construire
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"
Essentiellement, le else
est ignorée si la boucle est interrompue, mais s'exécute si la boucle s'est interrompue suite à une défaillance de condition (pour while
) ou à la fin de l'itération (pour for
).
Existe-t-il un moyen de le faire dans bash
? Le plus proche que je peux penser est d'utiliser une variable de drapeau:
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
qui est plutôt verbeux.
Court et doux. J'aime ça. – nneonneo
Big BUG! La liste de 'x y z' n'atteint jamais' y z' si 'x' est faux! @nneonneo comment pourriez-vous accepter cela ?! –
Voici ce que j'utilise: '(pour i dans x y z; faire [condition $ i] && echo" Condition $ i vrai "& & exit; done) && echo" Trouvé un match "|| echo "N'a pas trouvé de correspondance" '. Notez l'utilisation de '&& exit' au lieu de' || exit', qui est la clé pour que ça continue quand 'x' est faux. – nneonneo