Cela fonctionne sur une invite shell (bash, dash):
[ -z "" ] && echo A || echo B
A
Cependant, j'essaie d'écrire un script shell POSIX , cela commence comme ceci:
#!/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
Et je ne sais pas pourquoi, mais je ne reçois pas le message :
L'argument donné est vide.
si j'appelle le script comme ceci:
./test_empty_argument ""
Pourquoi donc?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
fonctionnerait bien; une chaîne vide entre guillemets ne sera pas supprimée de la liste d'arguments de [
. Mais ce n'est pas nécessaire non plus, car cela fonctionne [ -z "$var" ]
aussi très bien.