Это работает в командной строке (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" ]
тоже работает просто отлично.