Shell脚本变量空值检测异常求助:变量有值却判定为空
问题排查与修正方案
我来帮你搞定这个问题!你的Shell脚本里有两处关键错误,导致判断逻辑完全偏离预期,还有一处分支文字搞反了,我给你一一拆解:
错误点分析
变量引用错误
你写的echo "list_Data"和[[ -z "list_Data" ]]里,都是直接用了字符串"list_Data",而不是引用变量$list_Data。Shell会把不带$的list_Data当成普通字符串处理,所以:- 判断语句里的
[[ -z "list_Data" ]]是在检查字符串"list_Data"是否为空,这个字符串长度显然不为0,所以条件为假,进入else分支输出"empty",完全和变量list_Data的实际内容无关。 - 你实际执行时输出了变量内容,说明
echo部分可能是笔误写成了echo $list_Data,但判断部分的错误是核心问题。
- 判断语句里的
分支输出逻辑反了
-z选项的作用是检查字符串长度是否为0(即空),如果变量为空,[[ -z "$list_Data" ]]会返回真,此时应该输出"empty";反之变量非空时输出"not Empty",你原来的分支内容写反了。
修正后的完整脚本
list_Data="2018-01-15 10:00:00.000|zQfrkkiabiPZ||04| 2018-01-15 10:00:00.000|zQgKLANvbRWg||04| 2018-01-15 10:00:00.000|zQgTEbJjWGjf||01| 2018-01-15 10:00:00.000|zQgwF1YJLnAT||01|" echo "$list_Data" # 用$引用变量,双引号保留变量内的空格与特殊字符 if [[ -z "$list_Data" ]] then echo "empty" # 变量为空时输出 else echo "not Empty" # 变量非空时输出 fi
执行效果
修正后运行脚本,会先输出list_Data的完整内容,然后输出not Empty,完全符合预期。
内容的提问来源于stack exchange,提问作者user6223604
相关产品推荐
相关产品推荐

