一、引言
最近在工作中開始嘗試着使用 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:)