如何在 Linux 中不執行 Bash 指令碼的情況下檢查其語法?


在程式設計時,我們總有可能犯各種錯誤。編譯器和直譯器在這種情況下總是可以幫助我們,但為了使用它們,我們必須執行程式或某種 IDE,它會不斷檢查這些錯誤並在每次出現錯誤時提醒我們,以便我們能夠糾正它們。

如果我們不想在花哨的 IDE 中編寫程式碼,也不想執行程式,那麼如果存在任何選擇,我們可供選擇的餘地就非常少了。如果您正在編寫 Bash 指令碼,我們當然可以檢查 Bash 指令碼是否存在任何語法錯誤。

需要注意的是,我們能夠檢測到的語法錯誤僅限於編譯時錯誤,而不是執行時錯誤。

示例

讓我們探索一個示例。假設我們有一個 Bash 指令碼,其中包含類似以下的程式碼:

for f in *.txt; do mv "$f" "${f// /_}"; done

以上程式碼很簡單,它只是迴圈遍歷當前目錄中所有 **.txt** 檔案,然後更改包含空格的檔名,因為它用 **_(下劃線)** 替換空格。

這非常有效,現在當我們執行命令來檢查上述 Bash 指令碼是否存在任何語法錯誤時,我們將不會得到任何輸出。

讓我們探索這個特定案例:

在您的終端中執行以下命令,其中也存在 sample.sh 檔案。

bash -n sample.sh

當我執行此命令時,終端將簡單地不輸出任何內容。

現在讓我們對我們的 sample.sh 進行更改,這將使其成為一個無效的 Bash 指令碼,然後我們將在終端中再次執行相同的命令。

for f in *.txt; do mv "$f" "${f// /_}"; done = true

現在,當我們執行下面顯示的以下命令時:

bash -n sample.sh

輸出將是:

immukul@192 linux-questions-code % bash -n sample.sh
sample.sh: line 1: syntax error near unexpected token `='
sample.sh: line 1: `for f in *.txt; do mv "$f" "${f// /_}"; done = true'

這就是我們能夠在不執行指令碼的情況下檢查語法錯誤的方法。現在,我們談到了這個命令只會檢測編譯時錯誤,而不是執行時錯誤,我們可以透過再次更改 sample.sh 來確認這一點:

for d in *.txt; do mv "$f" "${f// /_}"; done

現在,當我們在上面顯示的 sample.sh 檔案上執行下面顯示的命令時:

bash -n sample.sh

輸出將不包含任何內容。

因此,最終的結論是,只有在您想要檢查語法錯誤時才應使用此命令。

更新於:2021-07-29

337 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.