我声明了两个变量但未设置:
__var1=
__var2=
现在我设置__var2
有一些价值:
__var2=1
当我尝试做这样的检查时:
[ -z "$__var1" -a -z "$__var2" ] || echo "Both missing!"
我收到了这条消息Both missing!
。但那不正确。
为什么?以及如何进行适当的检查,看看它们是否都缺失了?
答案 0 :(得分:3)
@Dave Schweissguth's answer对代码的逻辑提出了一个很好的观点,但是还有一些关于语法的注意事项:
$__var1=
之类的作业 - 此后已更正]在Bourne-like / POSIX兼容只有当引用时, 因此,您的作业应为:$
__var1=
__var2= # or, later: __var2=1
,因此编写您的内容的最佳bash方式将是:bash
请注意使用[[ -z $__var1 && -z $__var2 ]] && echo "Both missing!"
rater而不是[[ ... ]]
,这样就无需将操作数重复引用到[ ... ]
。
-z
答案 1 :(得分:3)
如果用户想要检查变量是否真的未设置而不只是具有空值,则可以执行以下操作:
$ A=1234
$ [[ -z ${A+.} ]] && echo "Variable is unset."
$ A=
$ [[ -z ${A+.} ]] && echo "Variable is unset."
$ unset A
$ [[ -z ${A+.} ]] && echo "Variable is unset."
Variable is unset.
在你的情况下,它可能是
[[ -z ${__var1+.} && -z ${__var2+.} ]] && echo "Both variables are unset!"
答案 2 :(得分:1)
您的代码打印出“两个都丢失!”如果(||
)两个(-a
)变量都为空(-z
)则不成立([ -z "$__var1" -a -z "$__var2" ] && echo "Both missing!"
)。如果是真的,您想要打印消息。这样做:
-z
我不记得曾经看过没有-a
或{{1}}的bash或测试版本(用于评估相同表达式的内容),所以据我所知,以上内容将会起作用你可能会发现任何类Unix系统。