var="$(command1 -l "$var2" -c "command2|grep -c "search"")" if [[ var !=0 ]]; then fi 
¿Por qué obtengo el «operador binario condicional esperado»? Ya busqué y. Veo que [[]] es una declaración de prueba, pero ¿por qué no funcionaría?
Responder
-  Usted «falta 
$delante de var cuando lo llames, como lo escribiste, será literalmentevar. -  Considere  posibles vulnerabilidades  de su secuencia de comandos cuando utilice 
[[ ... ]]o(( ... ))junto con variables que no puede controlar. En su caso, sería mejor usar[ "$var" -ne 0 ]. -  Le falta un espacio entre 
!=y0(¡esta es la fuente del error!) -  
!=es un operador de comparación de cadenas , aunque podría funcionar en su ejemplo, desea usar-nepara comparar enteros. 
Utilice shellcheck .
Comentarios
-  Nota t hat 
(( var !=0 ))también funcionaría aquí, pero como[[ "$var" -ne 0 ]]sería una vulnerabilidad de inyección de comando arbitraria si la naturaleza de la salida del comando que se captura no está bajo su control. -  Gracias St é phane por sus ideas. ¿Considera que 
[[ "$var" -ne 0 ]]no es seguro? ¿Qué pasa con lo mismo sin comillas? Entonces, ¿qué crees que debería preferirse? -  En 
[[ $var -ne 0 ]](con o sin las comillas, las comillas no son necesarias en este caso particular) o(( var!=0 )), el contenido de$varse evalúa como expresiones aritméticas y pueden ocurrir cosas malas en ese momento .[ "$var" -ne 0 ](las comillas son necesarias aquí ya que[es un comando ordinario) es seguro enbash(pero no todos los demás shells), ya que$varse interpreta solo como un entero decimal.[ "$var" != 0 ](o el[[ $var != 0 ]]kshism) también es seguro, pero devolvería verdadero si$varcontiene00ya que ' es una comparación de cadenas.