Retornar um status de saída diferente de zero (falha) ao falhar na impressão do conteúdo de uma variável de ambiente parece a coisa certa a se fazer comigo. Isso corresponde ao comportamento do tcsh
construído com o mesmo nome e de implementações históricas em BSDs.
Se isso não for feito, será difícil diferenciar entre uma variável definida como um valor vazio e outra que não esteja definida.
Se você quiser evitar o efeito de set -e
/ set -o errexit
, use:
var=$(printenv VAR) || : Do not care if it fails
Ou:
if var=$(printenv VAR); then
if [ -z "$var" ]; then
echo "VAR is set but empty or consists only of newline characters"
else
echo "VAR is set and non-empty"
fi
else
echo "VAR is not in the environment"
fi
Observe também que todos os shells inicializam variáveis do shell a partir das variáveis de ambiente correspondentes (para aqueles que podem ser mapeados para variáveis do shell, e alguns shells excluem outros), assim você pode usar $VAR
em seu script para se referir a eles value (note, porém, que nas shells Bourne, csh ou tcsh (as únicas shells em que alguém ainda pode querer usar esses '...'
do seu), o valor do shell e env var pode divergir se você modificar a variável do shell sem exportar (ou atribuindo-o com setenv
para (t) csh)).