Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Comparando valores no bash!

Olá amigos estudantes!
Para quem vem de outras linguagens e está acostumado a utilizar ' = ' para atribuir valores a variaveis e para fazer comparações ' == ' ou ' === ' .
Quando vamos fazer isso no bash surge uma duvida de como isso é interpretado.
No Bash, o comportamento é um pouco diferente e pode confundir mesmo. Vamos esclarecer:

No Bash:

  • Dentro do bloco de condição if [ ... ], o = não é uma atribuição, e sim uma comparação de strings.
    Exemplo:
    if [ "$nome" = "Alice" ]; then
        ...
    fi
    
    Aqui, o Bash compara se a variável nome contém a string "Alice".

Cuidado com o erro comum:

Se você usasse == dentro do [ ], como:

if [ "$nome" == "Alice" ]; then

Isso também funciona no Bash, mas nem sempre é garantido em todos os shells.
O == é uma extensão suportada pelo Bash, mas pode não funcionar em shells mais antigos ou em scripts POSIX-compatíveis (como o /bin/sh em alguns sistemas).
Portanto:

  • Use = para maior compatibilidade (recomendado).
  • Ou use == se você tiver certeza de que o script rodará sempre no Bash.

Sobre atribuição:

A atribuição de valor acontece fora do if, por exemplo:

nome="Alice"  # Aqui é atribuição

Dentro do if, o interpretador entende que você está chamando o comando [, que é um programa (test), e passando argumentos para ele.
Ele não interpreta = como atribuição nesse contexto.

Alternativa mais moderna (preferida por muitos):

Você também pode usar a forma com [[ ... ]], que é mais robusta no Bash:

if [[ "$nome" == "Alice" ]]; then
    echo "Olá, Alice!"
fi

Dentro de [[ ]], o uso de == é totalmente seguro e até mais poderoso (suporta padrões com *, por exemplo).

✅ Resumo:

ContextoBash padrão ([ ])Bash moderno ([[ ]])
Atribuiçãonome="Alice"nome="Alice"
Comparação segura[ "$nome" = "Alice" ][[ $nome == "Alice" ]]

Portanto, no seu script, você não está fazendo uma atribuição dentro do if; está fazendo uma comparação, e o uso de = é correto e seguro dentro do [ ].
Se quiser ainda mais segurança e recursos, pode usar [[ ... ]] e ==.
Aqui estão alguns operadores para comparação em Bash:

  • -eq: Igual (usado para números)
  • -ne: Diferente (usado para números)
  • -gt: Maior que
  • -lt: Menor que
  • -ge: Maior ou igual
  • -le: Menor ou igual
  • =: Igualdade de strings
  • !=: Desigualdade de strings
  • -z: Verifica se a string está vazia
    Teste ai e comente alguma duvida.
    Obrigado.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas
solução!

Oi, Ronaldo! Como vai?

Agradeço por compartilhar.

Gostei da forma como você explicou as diferenças entre atribuição e comparação no Bash. Sua explicação tá bem estruturada e ajuda muito quem está migrando de outras linguagens. É importante compreender como o [ ] e o [[ ]] se comportam para evitar confusões no script.

Continue compartilhando seus aprendizados.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Oi Lorena.
Seu feedback serve de inspiração para continuar postando conteudo que acho relevante e que pode agregar a formação.
E me corrija se eu estiver errado!
Obrigado. :)