1. 程式人生 > 其它 >shell指令碼中變數一定要加雙引號

shell指令碼中變數一定要加雙引號

大多數時候,雖然可以不使用括起字串和字串變數的雙引號,但這並不是好主意。為什麼呢?因為如果環境變數中恰巧有一個空格或製表鍵,bash 將無法分辨,從而無法正常工作。這裡有一個錯誤的比較示例:

if [ $myvar = "foo bar oni" ]

then

     echo "yes"

fi

在上例中,如果 myvar 等於 "foo",則程式碼將按預想工作,不進行列印。但是,如果 myvar 等於 "foo bar oni",則程式碼將因以下錯誤失敗:

[: too many arguments

在這種情況下,"$myvar"(等於 "foo bar oni")中的空格迷惑了 bash。bash 擴充套件 "$myvar" 之後,程式碼如下:

[ foo bar oni = "foo bar oni" ]

因為環境變數沒放在雙引號中,所以 bash 認為方括號中的自變數過多。可以用雙引號將字串自變數括起來消除該問題。請記住,如果養成將所有字串自變數用雙引號括起的習慣,將除去很多類似的程式設計錯誤。"foo bar oni" 比較 應該寫成:

if [ "$myvar" = "foo bar oni" ]

then

     echo "yes"

fi