简写!-z

Ale*_*lls 2 shell bash shell-script

寻找替代方案:

local foo=""

if [[ ! -z "$foo" ]]; then
  echo "foo is actually not empty."
fi
Run Code Online (Sandbox Code Playgroud)

有什么方法可以检查变量是否已定义(非空)而无需否定?

ilk*_*chu 6

的反义词是,或者干脆没有运算符:-z word-n wordword

foo=x
if [[ "$foo" ]] ; then
    echo "foo is not empty"
fi
Run Code Online (Sandbox Code Playgroud)

请注意,您不能以这种方式在空值和未设置值之间进行测试。您需${foo+x}要这样做:[[ "${foo+x}" = x ]] 对于任何设置值都为真,甚至是空字符串。

-z,-n也适用于标准[ .. ]测试,您不需要[[ .. ]]这些。这里的区别在于[ .. ]变量内需要被引用。