2013-09-16 4 views
8

Ich hätte gerne die logische nicht für die folgende Bedingung Ausdruck in bash, Wie kann ich das tun?Wie logischer Operator nicht in komplexen bedingten Ausdruck in Bash verwenden?

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

wie kann ich die logische nicht direkt in dem obigen Ausdruck vorangestellt, dann ist es sehr mühsam es in Dinge wie diese wieder zu ändern:

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

Dank für Hinweise!

Antwort

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

Oder:

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

Und eine gute Praxis ist Räume zwischen den bedingten Operatoren und Operanden zu haben.

Einige könnten auch vermuten, dass, wenn Sie nur Zahlen zu vergleichen, anstatt einen arithmetischen Operator verwenden, oder verwenden Sie einfach (()):

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 

Obwohl es nicht lobenswert oder Vorsicht ist, ist gegeben, wenn $var manchmal sein könnte nicht numerisch oder hat keinen Wert oder nicht gesetzt, da es 0 als Standard oder einen anderen Wert einer anderen Variable bedeuten könnte, wenn es sich um den Namen einer Variablen handelt.

Verwandte Themen