Isso funciona em um prompt do shell (bash, dash):
[ -z "" ] && echo A || echo B
A
No entanto, estou tentando escrever um script de shell POSIX , que começa assim:
#!/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
E não sei por que, mas não recebo a mensagem :
O argumento fornecido está vazio.
se eu chamar o script assim:
./test_empty_argument ""
Por que é que?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
funcionaria bem; uma string vazia entre aspas não será removida da lista de argumentos de [
. Mas isso também não é necessário, porque [ -z "$var" ]
também funciona muito bem.