Are [“$ VAR” = “”] e [-z “$ VAR”] são sempre equivalentes?

8

Meu código é parecido com isto:

VAR=""

while [ -z "$VAR" ]; do
  VAR=$( command | grep "important_string" )
done

Por isso, quero pesquisar a saída de command , até que important_string apareça e coloque em $VAR .

Existe alguma diferença funcional entre [ -z "$VAR" ] e [ "$VAR" = "" ] ?

    
por Minix 06.07.2015 / 12:47

1 resposta

5

Sim, eles ( [ -z "$VAR" ] e [ "$VAR" = "" ] ...) são equivalentes. Ambos estão testando o vazio de $VAR (por exemplo, quando não está vinculado ou definido como uma string vazia).

Como comentado por Celada , coisas ruins podem acontecer ao usar [ "$VAR" = "" ] if VAR é válido teste (por exemplo, se VAR é -z ), em particular quando [ (ou test ) não é um shell embutido. Mas em bash ou zsh , o [ é interno e isso não parece ser um problema. Você pode usar [ "x$VAR" = "x" ] para o seu teste. Veja teste (1)

Claro, estou assumindo algum shell POSIX ou algo semelhante.

Talvez -z seja um pouco mais rápido (mas você não deve se preocupar com microssegundos em scripts de shell) e talvez você ache que = talvez seja mais legível.

    
por 06.07.2015 / 13:27