String 在if循环中检查bash上的变量是否为空

String 在if循环中检查bash上的变量是否为空,string,bash,if-statement,String,Bash,If Statement,我想在if语句中检查variable的值是否为空,并根据Bash脚本中相同的结果采取操作 我正在做这样的事情: if [ -z "${OriginSlotName-}" ] && [ -z "${TargetSlotName-}" ]; then echo "Value of both the slot are not given"; 尽管我将参数OriginSlotName和TargetSlotName传递为空,但不会执行此特定迭代,而是转到bash脚本的一部分,在

我想在if语句中检查variable的值是否为空,并根据Bash脚本中相同的结果采取操作

我正在做这样的事情:

if [ -z "${OriginSlotName-}" ] && [ -z "${TargetSlotName-}" ]; then

    echo "Value of both the slot are not given";
尽管我将参数OriginSlotName和TargetSlotName传递为空,但不会执行此特定迭代,而是转到bash脚本的一部分,在该部分中,它同时需要OriginSlotName和TargetSlotName

有人知道这里可能出了什么问题吗?还是有更好的方法来组织脚本?到目前为止,我有一个if语句,它有四个分支。if语句如下所示:

If (OriginSlotName & OriginSlotName != Empty)
    Do something

else if (OriginSlotName = Empty & OriginSlotName != Empty )
    Do something

else if (OriginSlotName != Empty & OriginSlotName = Empty )
    Do something
else
    Do something (Both OriginSlotName & OriginSlotName = Empty )

除了使用“如果”之外,是否还有更好、更有效的方法来执行这些检查并根据结果采取相关措施?

您可以这样编写您的条件:

if [[ -z "${OriginSlotName}" &&  -z "${TargetSlotName}" ]]; then
    echo "Value of both the slot are not given";
fi

仅当$OriginSlotName和$TargetSlotName均为空时,才会验证此条件。

如果stmt通常也能正常工作,则会验证原始条件:

OriginSlotName=""
TargetSlotName=""

if [ -z "${OriginSlotName}" ]  && [ -z "${TargetSlotName}" ]; then
    echo "Value of both the slot are not given";
fi

echo "${TargetSlotName}"
echo "${OriginSlotName}"
运行它时,输出(使用GNU bash,版本4.3.11(1)-release(x86_64-pc-linux-GNU)是:

未给出两个插槽的值

后面是两行空行


我认为挂起的连字符“-”代码中的变量是问题的根源。

问题在于如何调用脚本,最初我使用所有必需的参数调用脚本,但没有使用双引号括起来。当使用双引号括起来的参数调用脚本时,对变量进行了求值。我还必须修改脚本和我们e ecerulm对此帖子的回答如下:


基本上,我还必须在定义了
set-u
的脚本中检查unset或empty。

你的if条件很奇怪。@Tuan是的,我知道,这就是为什么我要求提供一些建议。你能发布一个吗?这比伪代码或与你类似但不相同的代码更有用run@thatotherguy我想我找到了解决办法,我将更新答案部分。谢谢你的答案,只是出于好奇,我的if语句会发生什么。从逻辑上讲,它也应该工作,但为什么它不工作?实际上是的,它应该工作。也许你有一个奇怪的bash版本?你能找到你正在使用的版本吗?不幸的是,它不工作。使用上述方法,如果两者都是空的,那么en没有调用任何if条件。