ShellCheck 0.9 現已推出,它是 shell 腳本的靜態分析器

ShellCheck 0.9專案已經發布,開發了一個用於shell腳本靜態分析的系統,支援識別腳本中的錯誤,同時考慮到bash、sh、ksh和dash的特性。 該專案程式碼是用 Haskell 編寫的,並根據 GPLv3 授權分發。 提供了與 Vim、Emacs、VSCode、Sublime、Atom 以及支援 GCC 相容錯誤報告的各種框架整合的組件。

ShellCheck 0.9 現已推出,它是 shell 腳本的靜態分析器

它支援識別程式碼中的語法錯誤(導致解釋器在執行時顯示錯誤)和語義問題(導致執行不會中斷,但腳本行為發生異常)。 該分析器還可以識別在某些情況下可能導致故障的瓶頸、不明顯的問題和陷阱。

在檢測到的錯誤類別中,我們可以注意到轉義特殊字元並將其用引號引起來的問題、條件表達式中的錯誤、命令的不正確使用、處理時間和日期的問題以及初學者的典型語法錯誤。 例如,比較“[[ $foo==0 ]]”時不存在空格、“var = 42”存在空格或賦值“$foo=42”時存在$符號、變數的使用不帶引號“echo $1”,表示「tr -cd '[a-zA-Z0-9]'」中額外的方括號,

此外,它還支援輸出改進程式碼風格、消除可移植性問題和提高腳本可靠性的建議。 例如,建議使用語法“$((..))”代替“echo $[1+2]”,構造“rm -rf”$STEAMROOT/”*”將被標記為不安全如果變數$STEAMROOT 不填,則能夠刪除根目錄,並且使用“echo {1..10}”會反白與dash 和sh 不相容。

在新版本中:

  • 新增了對“local readonly foo”等表達式的警告。
  • 新增了有關不可用命令的警告。
  • 新增了有關“declare x=1 y=$x”反向連結的警告。
  • 如果 $? 新增了警告用於列印echo、printf、[ ]、[[ ]]和test的回傳碼。
  • 新增了刪除 ((..))inarray[((idx))]=val 的建議。
  • 新增了在算術上下文中連接雙括號的建議。
  • 新增了刪除表達式 a[(x+1)]=val 中括號的建議。

來源: opennet.ru

添加評論