shell 变量非空值,空值和不存在的辨别

这里以ubuntu14 bash 为例,以实测为主,屏蔽掉网络上一些含糊不清的说法

------------------------------------------------------------

1. 不要直接用 -n 来判断一个变量是否为空,因为它判断不对

------------------------------------------------------------

实验:

$ a=""

$ [ -z $a ] && echo Null || echo NotNull

Null

$ [ -n $a ] && echo NotNull || echo Null

NotNull

-n 与 -z 顶牛了,-z说为空,-n说不为空,显然-n 说的是不对的,

所以我们以后不要用-n 判断字符串是否为空了!!!

那这个 -n 还有什么用? 是bug 吗?

我也不知道 -n 还有什么用了, 看起来是个bug! 你说呢?

------------------------------------------------------------

2. -z 也有点近视眼,它分不清到底是空还是变量根本不存在.

------------------------------------------------------------

我们首先用 declare -p 命令确认b 变量是不存在的,然后继续以下实验

实验:

$ [ -z $b ] && echo Null || echo NotNull

Null

当然把不存在的变量当成Null 也未尝不可,也不是什么大事,不算bug,

因为它只有两个值,真或假,总不能当成非Null吧.!

------------------------------------------------------------

3. 如果你确实要知道该变量是空还是不存在,该怎么办呢?

------------------------------------------------------------

虽然这种要求一般是不需要甄别的,所以网上就有很多含混的说法,基本上不区分两种情况.

一定要区分时,可以参考如下实例使用

hjj@hjj-Inspiron:~$ echo ${a-NotDefine}

hjj@hjj-Inspiron:~$ echo ${b-NotDefine}

NotDefine

看到了吗? a是有定义的,它回传的是空,你只看到了一个空行

b 是无定义的它回传了"NotDefine"字符串。

借助于第三个变量例如c,判断其是否等于"NotDefine"就知道变量是否定义过。

这样把$a,$b的真实面目就区分开了!

这里的关键是利用了${var-default}格式区分了变量定义和未定义.

补充: 用=或 == 判断两个字符串相等的方式也不能判断是不存在还是为空值

a是存在的为空,b是不存在的。

$[ "$a" == "" ] && echo YES || echo NO

YES

$[ "$b" == "" ] && echo YES || echo NO

YES

分不清也有分不清的好处,这样容错性倒是加强了,因为大多数不用管到底是不存在空还是存在空.

---------------------

作者:hejinjing_tom_com

来源:CSDN

原文:https://blog.csdn.net/hejinjing_tom_com/article/details/82047778

版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,216评论 0 11
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,119评论 0 10
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,705评论 0 17
  • 上篇说到碧山书局和猪栏酒吧,将书香与民宿安放在了碧山,接着来说另一个文化引入的重头戏 - 工销社。 我父亲曾在北京...
    Teresae2016阅读 3,785评论 0 1
  • 停笔已经很久很久了……突然很怀念那种,把所有的喜怒哀乐都记载下来,当有一天再回首时就可以看到岁月的印迹!从暗淡...
    忘伊人阅读 1,111评论 0 0