Scripting de shell: opciones -z y -n con if

55

Tengo un script de shell donde tenemos las siguientes líneas if [ -z "$xyz" ]y if [ -n "$abc" ], pero no estoy seguro de cuál es su propósito. ¿Alguien puede explicar?

usuario3173953
fuente

Respuestas:

66

Puede encontrar una muy buena referencia para los operadores de bash aquí . Si está utilizando un shell diferente, solo busque <my shell> operatorsy encontrará todo lo que necesita. En su caso particular, está utilizando:

-n
   string is not null.

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

Para 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
fuente
3

man testo man [le dará todas las opciones para probar el comando. En este caso, -n está probando para ver si el contenido de $ abc tiene una longitud distinta de cero y -z está probando para ver si el contenido de $ xyz es una cadena de longitud cero.

doneal24
fuente
man [no funciona para mí en GNU bash, versión 4.1.2 (1) -release (x86_64-redhat-linux-gnu). Pero +1 para prueba de hombre.
Andrew Lorien
1
Nota man test(¿siempre?) Proporciona la página de manual para la versión del programa externo, que (para la versión de GNU-coreutils al menos) advierte explícitamente que algunos shells (la mayoría de IME) tienen una versión integrada que puede ser diferente.
dave_thompson_085