【发布时间】:2014-09-03 21:26:45
【问题描述】:
我声明了两个变量但未设置:
__var1=
__var2=
现在我将__var2 设置为具有一些价值:
__var2=1
当我尝试进行这样的检查时:
[ -z "$__var1" -a -z "$__var2" ] || echo "Both missing!"
我收到了这条消息Both missing!。但这是不正确。
这是为什么呢?以及如何进行适当的检查,看看它们是否都丢失了?
【问题讨论】:
-
从
bash4.2 开始,您可以使用-v来测试是否设置了变量,而-z将在变量未设置或设置为空字符串时为真:-v __var1(不是没有美元符号;-v采用变量的名称,而不是变量扩展为的字符串)。 -
很高兴知道,但是在我的脚本中,我确实声明了我的变量,只是想知道它们是
__var1=还是__var1=something。 -
只是声明它们就被认为是设置,这不是很奇怪吗?
-
你没有在 shell 中声明变量。为未设置的名称分配一个值(
var=和var=""是等效的;两者都将空字符串分配给var)使其成为一个设置变量。换句话说,shell 中不存在没有值的变量。 -
foo=; [[ -v foo ]] && echo "foo is set"; [[ ! -v bar ]] && echo "bar is not set".