Como determinar se uma variável bash está vazia?

Qual é a melhor maneira de determinar se uma variável em bash está vazia ("")?

Ouvi dizer que é recomendado que eu faça if [ "x$variable" = "x" ]

Essa é a forma **correcta***? (deve haver algo mais simples)

Solução

Isto retornará verdadeiro se uma variável não estiver definida ou definida para a string vazia ("").

if [ -z "$VAR" ];
Comentários (10)

-z é a melhor maneira.

Outra opção I've usada é definir uma variável, mas ela pode ser substituída por outra variável, por exemplo

export PORT=${MY_PORT:-5432}

Se a variável $MY_PORT estiver vazia, então PORT é definida para 5432, caso contrário PORT é definida para o valor de MY_PORT. Note que a sintaxe inclui os dois pontos e traço.

Comentários (1)

Se você'está interessado em distinguir os casos de status set-empty versus unset status unset, olhe a opção -u para bash:

$ set -u
$ echo $BAR
bash: BAR: unbound variable
$ [ -z "$BAR" ] && echo true
bash: BAR: unbound variable
$ BAR=""
$ echo $BAR

$ [ -z "$BAR" ] && echo true
true
Comentários (0)