Script de shell: -z e -n opções com if

54

Eu tenho um script de shell onde temos as seguintes linhas if [ -z "$xyz" ]e if [ -n "$abc" ], mas não tenho certeza qual é o seu objetivo. Alguém pode explicar?

user3173953
fonte

Respostas:

65

Você pode encontrar uma referência muito agradável para os operadores do bash aqui . Se você estiver usando um shell diferente, basta procurar <my shell> operatorse você encontrará tudo o que precisa. No seu caso particular, você está usando:

-n
   string is not null.

-z
  string is null, that is, has zero length

Ilustrar:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null
terdon
fonte
3

man testou man [lhe dará todas as opções para testar o comando. Nesse caso, -n está testando para verificar se o conteúdo de $ abc tem um comprimento diferente de zero e -z está testando para verificar se o conteúdo de $ xyz é uma sequência de comprimento zero.

doneal24
fonte
man [não funciona para mim no GNU bash, versão 4.1.2 (1) -release (x86_64-redhat-linux-gnu). Mas +1 para o teste do homem.
andrew lorien
11
Nota man test(sempre?) Fornece a página de manual da versão do programa externo, que (pelo menos para a versão GNU-coreutils) adverte explicitamente que alguns shells (na maioria IME) têm uma versão interna que pode ser diferente.
Dave_thompson_085