web-dev-qa-db-fra.com

Comment utiliser l'opérateur non logique dans une expression conditionnelle complexe dans Bash?

Je voudrais avoir la logique non pour l'expression de condition suivante dans bash, comment puis-je faire cela?

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

comment puis-je ajouter le logique pas directement dans l'expression ci-dessus, il est très fastidieux de le changer à nouveau en des choses comme ceci:

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

merci pour tous les indices!

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

Ou:

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

Et une bonne pratique est d'avoir des espaces entre vos opérateurs conditionnels et vos opérandes.

Certains pourraient également suggérer que si vous comparez simplement des nombres, utilisez plutôt un opérateur arithmétique ou utilisez simplement (( )):

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

Bien que ce ne soit pas louable, il faut être prudent si $var peut parfois ne pas être numérique ou n'a pas de valeur ou n'est pas défini, car cela peut signifier 0 comme valeur par défaut ou une autre valeur d'une autre variable s'il s'agit du nom d'une variable.

31
konsolebox