Shell 踏坑之旅:if [ -n ] 意想不到的錯誤用法

一、引言

最近在工作中開始嘗試着使用 Shell 編寫一些腳本來替代人力做一些繁瑣而又簡單的工作。

其中,我遇到這麼一個問題,代碼類似如下:

tmp_val=$(grep xxx tmp.txt)

if [ -n $tmp_val ] 
then echo yes
else echo no
fi

原意是想要從 tmp.txt 文件中查找 xxx 字符串,將 grep 的結果賦值給 tmp_val,如果存在的話,tmp_val 必然有值,就打印一個 yes,否則打印一個 no。

看似很簡單的樣子,但是當我執行上述代碼後卻發現,不管 tmp.txt 中到底有沒有 xxx 字符串,最後都會打印出來一個 yes,這是爲什麼呢?

二、解決

經過我網上搜索相關資料發現:

當你 tmp_val 的值爲空的時候,if [ -n $tmp_val ] 就相當於 if [ -n ],而 -n 在這裏被識別爲一個字符串,它不爲空,必然判斷永遠都是真值

可見這確實是一個比較容易寫錯的地方,那麼怎麼修復這個問題呢?

tmp_val=$(grep xxx tmp.txt)

if [ -n "$tmp_val" ] 
then echo yes
else echo no
fi

我們只需要在 if [ -n ] 中的字符串變量外部增加一個雙引號 "$tmp_val" 將變量括起來即可,這樣即使變量爲空,也不會出現 -n 判斷的永遠真值的問題了。

Shell 編程學習仍在路上,希望本篇博客能夠給你帶來一些幫助~~~

To be Stronger:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章