Shell變數賦值語句不能有空格

宋哥發表於2017-01-24

iamlaosong文

前兩天編一個shell指令碼犯了一個低階錯誤,給變數賦值時加了空格(時間長了,規則都忘了),結果導致變數沒有賦值,無法完成預定的功能。因為是一個定時執行的指令碼,又是用一個老指令碼改的,也就沒有測試,結果沒有發現這個錯誤,幾天後檢查時才發現了問題。教訓就是:1、工作要認真認真再認真;2、再小的改動也要測試一下。

1、shell指令碼變數名和等號及等號和值之間不能有空格,這可能和我們熟悉的所有程式語言都不一樣,變數命名須遵循如下規則:
•首個字元必須為字母(a-z,A-Z)。
•中間不能有空格,可以使用下劃線(_)。
•不能使用標點符號。
•不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。

賦值語句等號兩邊不能有空格,中間有空格時,shell是把變數當一個命令執行的,如:

PROV = anhui

執行時會提示:./tt.sh: line 14: PROV: command not found

正確的寫法是:

PROV=anhui

如果所賦的值包含空格,可以用引號括起來(沒有空格時也可以用引號,效果和不用一樣),例如:

PROV="anhui province"

2、變數的引用是用$符號加上變數名,例如:

echo  ../${PROV}/${DATDIR}

變數名外面的花括號是可選的,加不加都行,加花括號是為了幫助直譯器識別變數的邊界,建議給所有變數加上花括號,這是個好習慣,既便於閱讀,又不易出錯。 

最後想說明一下,shell指令碼對空格有嚴格的規定,賦值語句等號兩邊不能有空格,而字串比較,等號兩邊必須有空格,如:

if [ "${sdpt}" = "sdpt_js" ]; then


相關文章