Skip to content
Latchkey

O Que É set -u? Falhando em Variáveis Indefinidas

set -u (nounset) faz o shell tratar qualquer referência a uma variável indefinida como um erro, em vez de silenciosamente substituí-la por uma string vazia.

Por padrão, usar uma variável que nunca foi definida apenas produz uma string vazia, o que pode levar a desastres como rm -rf "$DIR/" deletando a partir da raiz quando $DIR está vazio. set -u impede isso ao transformar uma variável não definida em um erro imediato. É o u em set -euo pipefail.

O que set -u faz

Com set -u ativo, referenciar uma variável que não tem valor faz o shell imprimir um erro e sair. Isso captura erros de digitação em nomes de variáveis e entradas que nunca foram fornecidas.

O perigo que ele previne

Sem set -u, $TYPOED_VAR silenciosamente se torna vazio. Um path construído a partir de uma variável vazia pode apontar para algum lugar catastrófico, e uma entrada obrigatória ausente pode deixar um build rodar sem configuração.

Capturando bugs reais

  • Um nome de variável escrito errado aparece como um erro, não como silêncio.
  • Uma variável de ambiente obrigatória ausente falha rápido.
  • Erros de path vazio são capturados antes de causarem dano.

Fornecendo defaults

Quando uma variável é legitimamente opcional, use "${VAR:-default}" para fornecer um fallback. Isso funciona com set -u, dando um valor sem disparar o erro de variável não definida.

set -u no CI

Scripts de CI dependem de variáveis de ambiente e secrets que podem estar ausentes em alguns contextos. set -u faz um secret ou entrada ausente falhar de forma ruidosa no início, em vez de produzir um build quebrado que falha de forma confusa mais tarde.

Capturando entradas ausentes em runners gerenciados

Nos runners da Latchkey, set -u significa que um passo que espera uma variável de ambiente falha imediatamente se ela estiver ausente. Combine-o com defaults "${VAR:-}" para valores verdadeiramente opcionais para manter os passos seguros e flexíveis.

Principais conclusões

  • set -u torna referenciar uma variável não definida um erro em vez de uma string vazia.
  • Ele captura erros de digitação e entradas obrigatórias ausentes antes que causem dano.
  • Use "${VAR:-default}" para fornecer fallbacks para variáveis genuinamente opcionais.

Guias relacionados