大多數時候,雖然可以不使用括起字符串和字符串變量的雙引號,但這並不是好主意。為什么呢?因為如果環境變量中恰巧有一個空格或制表鍵,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