Skip to main content

ZC2002 - Undefined Variable

Descrição

Variável pode estar sendo usada antes de ser inicializada.

Exemplo Problemático

#!/bin/zsh

# Usando variável antes de atribuir
echo "O valor é: $undefined_var"

# Atribuição vem DEPOIS do uso
undefined_var="agora sim"

Ou variável que nunca é definida:

#!/bin/zsh

# Variável $API_KEY não existe no escopo
curl -H "Authorization: Bearer $API_KEY" https://api.example.com

Solução Correta

Inicialize a variável antes do uso:

#!/bin/zsh

# Inicialize primeiro
undefined_var="meu valor"
echo "O valor é: $undefined_var"

Ou verifique se existe:

#!/bin/zsh

# Verifique se a variável existe
if [[ -z "${API_KEY:-}" ]]; then
echo "Erro: API_KEY não configurada"
exit 1
fi

curl -H "Authorization: Bearer $API_KEY" https://api.example.com

Variáveis Ignoradas (Predefinidas)

O ZshCheck ignora automaticamente variáveis que geralmente são predefinidas pelo shell:

  • $HOME - Diretório home do usuário
  • $PATH - Caminhos de busca de executáveis
  • $USER - Nome do usuário atual
  • $SHELL - Shell padrão
  • $PWD - Diretório atual
  • $OLDPWD - Diretório anterior
  • Variáveis começando com _ (convenção de privado)

Padrões Defensivos

Use valores padrão quando a variável pode não existir:

#!/bin/zsh

# Sintaxe ${var:-default}
config_file="${CONFIG_FILE:-/etc/default.conf}"

# Sintaxe ${var:=default} - também atribui o valor
log_level="${LOG_LEVEL:=info}"

# Sintaxe ${var:?message} - erro se não definido
api_key="${API_KEY:?API_KEY não configurada}"

Limitações

O check atualmente:

  • Não rastreia fluxo de controle (não sabe se uma variável foi definida em um if anterior)
  • É conservador - pode reportar falso positivo para variáveis definidas em scripts chamados
  • Não analisa source dinâmico

Referências