這里以ubuntu14 bash 為例倍谜,以實(shí)測為主尔崔,屏蔽掉網(wǎng)絡(luò)上一些含糊不清的說法
------------------------------------------------------------
1. 不要直接用 -n 來判斷一個(gè)變量是否為空季春,因?yàn)樗袛嗖粚?/p>
------------------------------------------------------------
實(shí)驗(yàn):
$ a=""
$ [ -z $a ] && echo Null || echo NotNull
Null
$ [ -n $a ] && echo NotNull || echo Null
NotNull
-n 與 -z 頂牛了,-z說為空耘拇,-n說不為空惫叛,顯然-n 說的是不對的,
所以我們以后不要用-n 判斷字符串是否為空了!!!
那這個(gè) -n 還有什么用仑最? 是bug 嗎词身?
我也不知道 -n 還有什么用了损敷, 看起來是個(gè)bug! 你說呢拗馒?
------------------------------------------------------------
2. -z 也有點(diǎn)近視眼,它分不清到底是空還是變量根本不存在.
------------------------------------------------------------
我們首先用 declare -p 命令確認(rèn)b 變量是不存在的呈昔,然后繼續(xù)以下實(shí)驗(yàn)
實(shí)驗(yàn):
$ [ -z $b ] && echo Null || echo NotNull
Null
當(dāng)然把不存在的變量當(dāng)成Null 也未嘗不可,也不是什么大事郭宝,不算bug,
因?yàn)樗挥袃蓚€(gè)值,真或假衔统,總不能當(dāng)成非Null吧.!
------------------------------------------------------------
3. 如果你確實(shí)要知道該變量是空還是不存在缰冤,該怎么辦呢?
------------------------------------------------------------
雖然這種要求一般是不需要甄別的迷郑,所以網(wǎng)上就有很多含混的說法嗡害,基本上不區(qū)分兩種情況.
一定要區(qū)分時(shí),可以參考如下實(shí)例使用
hjj@hjj-Inspiron:~$ echo ${a-NotDefine}
hjj@hjj-Inspiron:~$ echo ${b-NotDefine}
NotDefine
看到了嗎? a是有定義的叹螟,它回傳的是空,你只看到了一個(gè)空行
b 是無定義的它回傳了"NotDefine"字符串。
借助于第三個(gè)變量例如c,判斷其是否等于"NotDefine"就知道變量是否定義過明垢。
這樣把$a,$b的真實(shí)面目就區(qū)分開了痊银!
這里的關(guān)鍵是利用了${var-default}格式區(qū)分了變量定義和未定義.
補(bǔ)充: 用=或 == 判斷兩個(gè)字符串相等的方式也不能判斷是不存在還是為空值
a是存在的為空,b是不存在的鬓照。
$[ "$a" == "" ] && echo YES || echo NO
YES
$[ "$b" == "" ] && echo YES || echo NO
YES
分不清也有分不清的好處,這樣容錯(cuò)性倒是加強(qiáng)了躺酒,因?yàn)榇蠖鄶?shù)不用管到底是不存在空還是存在空.
---------------------
作者:hejinjing_tom_com
來源:CSDN
原文:https://blog.csdn.net/hejinjing_tom_com/article/details/82047778
版權(quán)聲明:本文為博主原創(chuàng)文章次屠,轉(zhuǎn)載請附上博文鏈接裸违!