Esto funciona en un indicador de shell (bash, dash):
[ -z "" ] && echo A || echo B
A
Sin embargo, estoy tratando de escribir un script de shell POSIX , comienza así:
#!/bin/sh
[ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1
readonly raw_input_string=${1}
[ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1
Y no sé por qué, pero no recibo el mensaje :
El argumento dado está vacío.
si llamo al script así:
./test_empty_argument ""
¿Porqué es eso?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
funcionaría bien; una cadena vacía entrecomillada no se eliminará de la lista de argumentos de [
. Pero eso tampoco es necesario, porque [ -z "$var" ]
también funciona bien.