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
-  Vous « il manque 
$devant var quand vous lappelez, comme vous lavez écrit, il sera littéralementvar. -  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 ]. -  Il vous manque un espace entre 
!=et0(cest la source de lerreur!) -  
!=est un opérateur de comparaison de chaînes , bien que cela puisse fonctionner dans votre exemple, vous souhaitez utiliser-nepour 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$varest é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é dansbash(mais pas tous les autres shells), car$varest interprété comme un entier décimal uniquement.[ "$var" != 0 ](ou le[[ $var != 0 ]]kshism) est également sûr mais renverrait true si$varcontient00car ' une comparaison de chaînes.