Cada aplicativo é livre para interpretar uma variável não definida e uma variável vazia da mesma maneira ou não. Geralmente, é uma má ideia dar a eles diferentes significados, e a maioria dos aplicativos não faz isso, mas acontece.
Um exemplo em shells é a variável de shell IFS
(que é geralmente não exportados no ambiente, mas o mesmo princípio se aplica). Se não definido, o shell se comporta como se o valor fosse $' \t\n'
.
Em um script de shell, $foo
se expande para uma sequência vazia, seja foo
definido como vazio ou não definido. Você pode executar o shell na configuração nounset
( set -u
ou set -o nounset
) , caso em que o shell reporta um erro e sai se você tentar expandir uma variável não definida. Caso contrário, você pode distinguir entre variáveis não definidas e vazias com os modificadores expansão de parâmetros : ${foo:+a}
expande para a
se foo
não estiver definido ou vazio e para a sequência vazia, caso contrário, enquanto ${foo+a}
expande para a
mesmo se foo
estiver definido para a cadeia vazia.