unash变量检查bash

时间:2014-07-14 01:28:30

标签: bash unset

我声明了两个变量但未设置:

__var1=
__var2=

现在我设置__var2有一些价值:

__var2=1

当我尝试做这样的检查时:

[ -z "$__var1" -a -z "$__var2" ] || echo "Both missing!"

我收到了这条消息Both missing!。但那不正确

为什么?以及如何进行适当的检查,看看它们是否都缺失了?

3 个答案:

答案 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而不是[[ ... ]],这样就无需将操作数重复引用到[ ... ]

  • 相比之下,最便携(POSIX兼容)方式是:
-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系统。