2013-09-16 18 views
8

Mi piacerebbe avere il logico non per la seguente espressione di condizione in bash, come posso fare questo?Come utilizzare l'operatore logico non nell'espressione condizionale complessa in Bash?

if [[ $var==2 || $var==30 || $var==50 ]] ; then 
    do something 
fi 

come posso anteporre la logica non direttamente nella espressione di cui sopra, è molto noioso per cambiare di nuovo in cose come questa:

if [[ $var!=2 && $var!=30 && $var==50 ]] ; then 
    do something 
fi 

grazie per eventuali suggerimenti!

risposta

17
if ! [[ $var == 2 || $var == 30 || $var == 50 ]] ; then 
    do something 
fi 

Oppure:

if [[ ! ($var == 2 || $var == 30 || $var == 50) ]] ; then 
    do something 
fi 

E una buona pratica è quella di avere spazi tra gli operatori condizionali e operandi.

Alcuni potrebbero anche suggerire che, se si sta solo confrontando i numeri, utilizzare un operatore aritmetico, invece, o semplicemente usare (()):

if ! [[ var -eq 2 || var -eq 30 || var -eq 50 ]] ; then 
    do something 
fi 

if ! ((var == 2 || var == 30 || var == 50)) ; then 
    do something 
fi 

Anche se non è lodevole o cautela deve essere data se $var potrebbe essere a volte non numerico o non ha valore o non impostato, poiché potrebbe significare 0 come valore predefinito o un altro valore di un'altra variabile se è un nome di una variabile.