的简写! -z

的简写! -z

寻找替代方案:

local foo=""

if [[ ! -z "$foo" ]]; then
  echo "foo is actually not empty."
fi

有没有办法检查变量是否已定义(非空)而无需否定?

答案1

与is相反,或者简单地不使用运算符:-z word-n wordword

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

相关内容