Shell變數賦值語句不能有空格
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
相關文章
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用賦值語句賦值SQL變數賦值
- shell 變數賦值問題變數賦值
- shell變數命名與賦值變數賦值
- 執行sql語句給外部變數賦值SQL變數賦值
- 形似賦值語句的引數賦值
- shell中變數的取值與賦值變數賦值
- Linux Shell程式設計(7)——變數賦值Linux程式設計變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-對BOOLEAN變數賦值SQL變數賦值Boolean
- go語言變數的宣告與賦值Go變數賦值
- 變數的賦值 指標間接賦值變數賦值指標
- php之普通變數賦值、物件賦值、引用賦值的區別PHP變數賦值物件
- javascript變數賦值或者重新賦值注意事項JavaScript變數賦值
- JS 中賦值語句的祕密JS賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-使用SELECT INTO賦值SQL變數賦值
- 從資料庫返回多條紀錄賦值給shell變數資料庫賦值變數
- 變數的解構賦值變數賦值
- php變數賦值給jsPHP變數賦值JS
- python 多變數賦值Python變數賦值
- A SELECT statement that assigns a value to a variable must ... (向變數賦值的 SELECT 語句不能與資料檢索操作結合使用 )...變數賦值
- PLSQL Language Reference-PL/SQL語言基礎-變數賦值-作為子程式引數來賦值SQL變數賦值
- 你真的理解js的賦值語句麼JS賦值
- 物件屬性值賦給變數物件變數
- 給物件引用變數賦值(轉)物件變數賦值
- c#小灶——常量、變數和賦值C#變數賦值
- AC-DMIS 5.3 V變數賦值變數賦值
- 再說mysql中的變數賦值MySql變數賦值
- Shell程式設計-04-Shell中變數數值計算程式設計變數
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- vue 變數賦值同時改變的問題Vue變數賦值
- MySQL的sql語句取shell程式中的for in多變數一例MySql變數
- JS中的變數賦值深入理解JS變數賦值
- 列表切片賦值給另一個變數賦值變數
- 自己對Java中if變數賦值的理解Java變數賦值
- ES6:變數的解構賦值變數賦值
- ES6:變數的結構賦值變數賦值
- ES6 變數的解構賦值變數賦值
- ECMAScript6變數的解構賦值變數賦值
- C語言_指標變數的賦值與運算,很詳細C語言指標變數賦值