寻找替代方案:
local foo=""
if [[ ! -z "$foo" ]]; then
echo "foo is actually not empty."
fi
有没有办法检查变量是否已定义(非空)而无需否定?
答案1
与is相反,或者简单地不使用运算符:-z word
-n word
word
foo=x
if [[ "$foo" ]] ; then
echo "foo is not empty"
fi
请注意,您无法以这种方式在空值和未设置值之间进行测试。你需要的${foo+x}
是:[[ "${foo+x}" = x ]]
对于任何放值,甚至是空字符串。
-z
,也-n
可以与标准[ .. ]
测试一起使用,您不需要[[ .. ]]
这些。这里的区别是内部[ .. ]
变量需要加引号。
答案2
var=''
var2='foo'
e () { test ${#1} -gt 0; }
e "$var" && echo true || echo false
false
e "$var2" && echo true || echo false
true