Variáveis inexistentes sempre serão avaliadas como uma string vazia quando expandidas como $FOO
ou (equivalentemente) ${FOO}
, e não há problema em depender disso, exceto em um caso específico:
Se alguém chamou set -u
no shell atual antes de tentar usar essa variável, eles ativaram essa configuração:
-u Treat unset variables as an error when performing param- eter expansion. If expansion is attempted on an unset variable, the shell prints an error message, and, if not interactive, exits with a non-zero status.
Isso significa que, se você estiver escrevendo uma função projetada para ser originada em um script controlado por outra pessoa, talvez seja necessário paranóico quanto ao uso de variáveis não definidas. Caso contrário, use set -u
antes de Ao chamar sua função, o script sairia com uma mensagem de erro na primeira vez que você tentasse expandir uma variável não definida.
Se você está escrevendo seu próprio script, não há mal nenhum em contar com variáveis não definidas expandindo para a string vazia.
EDITAR - Além disso, apenas um pensamento - já que você está tornando a coisa toda condicional se os recursos de cor terminfo estão disponíveis para o seu terminal, por que não usar o terminfo para gerar as sequências, em vez de codificar os valores vt100? Algo como:
if [ -n "$force_color_prompt" ] && type tput &>/dev/null; then
GREEN="$(tput setaf 2)$(tput bold)"
DIM="$(tput dim)"
RESET="$(tput sgr0)"
fi
Isso pode ganhar alguma portabilidade em outros terminais (embora, reconhecidamente, o número de terminais que não usam os códigos mostrados seja pequeno e encolhimento). Também pode perder alguma portabilidade, pois alguns recursos podem não existir em algumas plataformas, dependendo da correção das definições do terminfo. YMMV.