opérateur binaire conditionnel attendu

var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi 

Pourquoi est-ce que jobtiens « opérateur binaire conditionnel attendu ». Jai déjà cherché et. Je vois que [[]] est une instruction de test, mais pourquoi cela ne fonctionnerait-il pas?

Réponse

  1. Vous « il manque $ devant var quand vous lappelez, comme vous lavez écrit, il sera littéralement var.
  2. Tenez compte des vulnérabilités possibles de votre script lorsque vous utilisez [[ ... ]] ou (( ... )) avec des variables que vous ne pouvez pas contrôler. Dans votre cas, il peut être préférable dutiliser [ "$var" -ne 0 ].
  3. Il vous manque un espace entre != et 0 (cest la source de lerreur!)
  4. != est un opérateur de comparaison de chaînes , bien que cela puisse fonctionner dans votre exemple, vous souhaitez utiliser -ne pour comparer des entiers.

Utilisez shellcheck .

Commentaires

  • Remarque t hat (( var !=0 )) fonctionnerait également ici, mais comme [[ "$var" -ne 0 ]] serait une vulnérabilité dinjection de commande arbitraire si la nature de la sortie de la commande capturée nest pas sous votre contrôle.
  • Merci St é phane pour vos informations. Considérez-vous [[ "$var" -ne 0 ]] comme dangereux? Et la même chose sans guillemets? Alors, quest-ce que vous pensez devrait être préféré?
  • In [[ $var -ne 0 ]] (avec ou sans les guillemets, les guillemets nétant pas nécessaires dans ce cas particulier) ou (( var!=0 )), le contenu de $var est évalué comme une expression arithmétique et de mauvaises choses peuvent alors se produire . [ "$var" -ne 0 ] (les guillemets étant nécessaires ici car [ est une commande ordinaire) est en sécurité dans bash (mais pas tous les autres shells), car $var est interprété comme un entier décimal uniquement. [ "$var" != 0 ] (ou le [[ $var != 0 ]] kshism) est également sûr mais renverrait true si $var contient 00 car ' une comparaison de chaînes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *