Ini berfungsi pada prompt shell (bash, dash):
[ -z "" ] && echo A || echo B
A
Namun, saya mencoba untuk menulis skrip shell POSIX , dimulai seperti ini:
#!/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
Dan saya tidak tahu mengapa, tetapi saya tidak mendapatkan pesannya :
Argumen yang diberikan kosong.
jika saya memanggil skrip seperti ini:
./test_empty_argument ""
Mengapa demikian?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
akan bekerja dengan baik; string kosong yang dikutip tidak akan dihapus dari daftar argumen [
. Tapi itu juga tidak perlu, karena [ -z "$var" ]
juga berfungsi dengan baik.