Python ha una caratteristica del linguaggio utile chiamata "per-else" (in modo simile "mentre-else"), che assomiglia a questo:Imitando il Python "per-else" costruire
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"
In sostanza, il else
viene saltato se il loop si interrompe, ma viene eseguito se il loop esce da una condizione di errore (per while
) o alla fine dell'iterazione (per for
).
C'è un modo per farlo in bash
? Il più vicino mi viene in mente è quello di utilizzare una variabile bandiera:
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
che è un po 'più prolisso.
Breve e dolce. Mi piace. – nneonneo
Big BUG! L'elenco di 'x y z' non arriva mai a 'y z' se' x' è falso! @nneonneo come hai potuto accettarlo ?! –
Ecco cosa sto usando: '(per i in x y z; do [condizione $ i] && echo" Condizione $ i true "e & exit; completato) && echo" Trovato una corrispondenza "|| echo "Non ho trovato una corrispondenza" '. Notare l'uso di '&& exit' invece di' || exit', che è la chiave per farlo continuare quando 'x' è falso. – nneonneo