有以下方法可以检查 Linux/Unix Shell 脚本中变量是否可用
[ ! -z "${MYVARIABLE}" ]
或者
[ -n "${MYVARIABLE}" ]
或者
[[ ! -v MYVARIABLE ]]
这三者有什么区别?什么时候应该优先使用其中一个?此外,如果我们尝试将它们组合起来,则会出现错误。例如,如果我们给出以下代码,它会正常工作
if [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
但是如果我们尝试执行以下操作
if [[ ! -v MYVARIABLE ]] && [ ! -z "${PROFILEHOME}" ] && [ -n "${PROFILEHOME}" ];
then
echo "Profile home variable that is being used is $PROFILEHOME"
else
echo "Profile home is not set"
fi
然后 shell 脚本返回一个错误消息,“ [:-v: 意外运算符”
这里给出的 -z 和 -n 运算符之间的区别只是表明 -z 检查字符串是否为空,而 -n 检查字符串是否不为空
-v
总是测试参数是否存在,无论其值是否为空。-z
仅测试字符串是否为空。它不知道也不关心参数;$x
只提供要测试的字符串,未设置的参数始终扩展为空字符串,就像空参数一样。-n
是 的相反数-z
,因此对于同一个参数,无论是否设置 , 和[[ ! -n "$x" ]]
都是等价的。[[ -z "$x" ]]
x
因为未设置的参数扩展为空字符串,所以
[[ -v x ]]
成功不会告诉您是否[[ -z "$x" ]]
会成功,[[ -z "$x" ]]
成功也不会告诉您是否[[ -v x ]]
会成功。