Điều này hoạt động trên một dấu nhắc shell (bash, dash):
[ -z "" ] && echo A || echo B
A
Tuy nhiên, tôi đang cố gắng viết một kịch bản shell POSIX , nó bắt đầu như thế này:
#!/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
Và tôi không biết tại sao, nhưng tôi không nhận được tin nhắn :
Đối số đã cho là trống rỗng.
nếu tôi gọi kịch bản như thế này:
./test_empty_argument ""
Tại sao vậy?
if [ X”” = X”$var” ] ; then echo isempty ; fi
[ "" = "$var" ]
sẽ làm việc tốt; một chuỗi rỗng được trích dẫn sẽ không bị xóa khỏi danh sách đối số [
. Nhưng điều đó cũng không cần thiết, bởi vì nó [ -z "$var" ]
cũng hoạt động tốt.