2013-09-16 7 views
8

Chciałbym, aby logiczne nie było następujące wyrażenie warunkowe w bash, jak mogę to zrobić?Jak używać logicznego operatora nie w złożonym wyrażeniu warunkowym w Bash?

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

jak mogę poprzedzić logicznym nie bezpośrednio w powyższej wypowiedzi, to bardzo uciążliwe, aby zmienić go ponownie do rzeczy tak:

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

Dzięki za wszelkie podpowiedzi!

Odpowiedz

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

Lub:

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

I dobrą praktyką jest, aby odstępy między swoimi operatorów warunkowych i argumentów.

Niektórzy mogą również sugerować, że jeśli jesteś po prostu porównywania liczb, użyj operatora arytmetycznego zamiast, lub po prostu użyć (()):

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 

Chociaż nie jest to godne pochwały lub ostrożność ma być podawana, jeżeli $var mogłoby być czasem nie numeryczne lub nie ma wartości ani nieuzbrojonych, ponieważ może oznaczać 0 jako domyślną lub inną wartość innej zmiennej, jeśli jest to nazwa zmiennej.