operador binário condicional esperado

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

Por que estou recebendo “operador binário condicional esperado”. Já procurei e. Vejo que [[]] é uma declaração de teste, mas por que não funcionaria?

Resposta

  1. Você “está faltando $ na frente de var quando você chamá-lo, como você escreveu, será literalmente var.
  2. Considere possíveis vulnerabilidades de seu script ao usar [[ ... ]] ou (( ... )) junto com variáveis que você não pode controlar. No seu caso, pode ser melhor usar [ "$var" -ne 0 ].
  3. Está faltando um espaço entre != e 0 (esta é a fonte do erro!)
  4. != é um operador de comparação de string , embora possa funcionar em seu exemplo, você deseja usar -ne para comparar inteiros.

Use o shellcheck .

Comentários

  • Nota t hat (( var !=0 )) também funcionaria aqui, mas como [[ "$var" -ne 0 ]] seria uma vulnerabilidade de injeção arbitrária de comando se a natureza da saída do comando sendo capturado não está sob seu controle.
  • Obrigado St é phane por seus insights. Você considera [[ "$var" -ne 0 ]] inseguro? Que tal o mesmo sem aspas? Então, o que você acha que deve ser preferido?
  • Em [[ $var -ne 0 ]] (com ou sem as aspas, as aspas não sendo necessárias neste caso específico) ou (( var!=0 )), o conteúdo de $var é avaliado como uma expressão aritmética e coisas ruins podem acontecer então . [ "$var" -ne 0 ] (as aspas são necessárias aqui, pois [ é um comando comum) é seguro em bash (mas não todos os outros shells), pois $var é interpretado apenas como um inteiro decimal. [ "$var" != 0 ] (ou o [[ $var != 0 ]] kshism) também é seguro, mas retornaria verdadeiro se $var contém 00, pois ' comparação de strings sa.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *