Це працює на оболонці (bash, dash):
[ -z "" ] && echo A || echo B
A
Однак я намагаюся написати сценарій оболонки POSIX , він починається так:
#!/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
І я не знаю чому, але я не отримую повідомлення :
Даний аргумент порожній.
якщо я називаю сценарій так:
./test_empty_argument ""
Чому так?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
спрацювало б добре; порожній рядок, який цитується, не буде видалений зі списку аргументів [
. Але це теж не потрібно, тому що [ -z "$var" ]
також працює чудово.