Abreviação de! -z

1

Procurando alternativa para:

local foo=""

if [[ ! -z "$foo" ]]; then
  echo "foo is actually not empty."
fi

Existe alguma maneira de verificar se uma variável está definida (não vazia) sem negação?

    
por Alexander Mills 07.05.2018 / 22:30

2 respostas

5

O oposto de -z word é -n word ou simplesmente word sem um operador:

foo=x
if [[ "$foo" ]] ; then
    echo "foo is not empty"
fi

Observe que você não pode testar entre um valor vazio e um valor não definido dessa maneira. Você precisará de ${foo+x} para isso: [[ "${foo+x}" = x ]] será verdadeiro para qualquer valor conjunto , até mesmo uma string vazia.

-z , -n funcionaria com o teste padrão [ .. ] , também, você não precisa de [[ .. ]] para eles. A diferença aqui é que dentro de [ .. ] as variáveis precisam ser citadas.

    
por 07.05.2018 / 22:47
0
var=''
var2='foo'
e () { test ${#1} -gt 0; }
e "$var" && echo true || echo false
    false
e "$var2" && echo true || echo false
    true
    
por 07.05.2018 / 22:50