Dies funktioniert auf einer Shell-Eingabeaufforderung (Bash, Dash):
[ -z "" ] && echo A || echo B
A
Ich versuche jedoch, ein POSIX- Shell-Skript zu schreiben. Es beginnt folgendermaßen:
#!/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
Und ich weiß nicht warum, aber ich verstehe die Nachricht nicht :
Das angegebene Argument ist leer.
wenn ich das script so aufrufe:
./test_empty_argument ""
Warum das?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
würde gut funktionieren; Eine in Anführungszeichen gesetzte leere Zeichenfolge wird nicht aus der Argumentliste von entfernt [
. Aber das ist auch nicht nötig, weil es [ -z "$var" ]
auch gut funktioniert.