这适用于shell(重击,破折号)提示:
[ -z "" ] && echo A || echo B
A
但是,我试图编写一个POSIX shell脚本,它的开始是这样的:
#!/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 ""
这是为什么?
5
请参阅如何测试变量是否为空或仅包含空格?用于测试变量是否为空,未设置或仅包含空格的方法。这个问题的问题与此无关。
—
ilkkachu
只需使用
—
user2497 '19
if [ X”” = X”$var” ] ; then echo isempty ; fi
@ user2497没有理由在最近20年发布的任何shell中使用它。这是旧的有问题的外壳的解决方法。
—
chepner
@chepner所以这不是一个有效的解决方案?还必须使用其他东西吗?
—
user2497 '19
[ "" = "$var" ]
会很好;带引号的空字符串不会从的参数列表中删除[
。但这也不是必须的,因为[ -z "$var" ]
也可以。