首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Shell 腳本常見語法錯誤與空格陷阱避坑指南

     編輯:Java 相關知識

核心原則:Shell 對空格極其敏感

空格是命令、參數、運算符的分隔符,稍有不慎就會改變語義或報錯。

高頻錯誤對照表

1. 變量賦值

寫法結果說明
gender=female✅ 正確等號兩邊不能有空格
gender =female❌ 錯誤視為命令 gender 參數 =female
gender= female❌ 錯誤視為命令 gender= 參數 female

2. 條件測試 [ ]

寫法結果說明
if [ $gender = female ]; then✅ 正確括號內兩側、運算符兩側必須有空格
if [$gender = female]; then❌ 錯誤[ 後缺空格
if [ $gender=female ]; then❌ 錯誤= 兩側缺空格,視為字符串非比較

3. if 與 then 同行

# 正確:then 前有分號
if [ $gender = female ]; then echo "ok"; fi

# 正確:then 換行
if [ $gender = female ]
then echo "ok"
fi

# 錯誤:then 前無分號且同行
if [ $gender = female ] then echo "ok"; fi
# 報錯:syntax error near unexpected token 'then'

4. if/elif/else 結構完整性

  • 每個 if、elif 後必須跟 then。
  • 缺 then 會報 syntax error near unexpected token 'else' 或 'fi'。

5. 命令與參數之間

# 正確
if [ -x "~/script.sh" ]; then ...

# 錯誤:-x 後無空格
if [ -x"~/script.sh" ]; then ...
# 視為測試字符串 "-x~/script.sh" 是否非空

6. 變量引用 $

# 正確
echo "$var"
echo "${var}"

# 錯誤:$ 與變量名/括號之間有空格
echo "$ var"
echo "${ var }"

調試技巧

  • bash -n script.sh:語法檢查不執行。
  • bash -x script.sh:逐行跟蹤執行(顯示展開後的命令)。
  • 善用 shellcheck(VS Code 插件/命令行)靜態分析。

最佳實踐清單

  1. 變量賦值零空格:VAR=value
  2. [ ] 內部全空格:[ "$A" = "$B" ]
  3. 字符串比較用 =([ ] 內)或 ==([[ ]] 內),雙側空格。
  4. then 同行加分號,換行免分號。
  5. 引用變量加雙引號:"$VAR" 防止詞法分裂與 glob 展開。
  6. 優先用 [[ ]](Bash/Zsh/Ksh)替代 [ ],支持 && || =~ 等現代語法,且不需轉義括號。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved