我正在使用 bash 撰寫腳本。
當一行導致錯誤時,我使用set -e它來讓腳本退出(錯誤)(我喜歡這種方法,我發現它不太容易出錯)。set -u當嘗試讀取未定義的變數時,我幾乎總是將它與“引發”錯誤結合使用。
長期以來,它就像一種魅力。但是今天,我在我的腳本中發現了一個以前用“set -eu”無法捕獲的錯誤,因為這似乎不會像往常一樣引發錯誤。
對于以下內容,我將使用false總是回傳錯誤的命令(在我的腳本中,這是另一個個人命令,但這使您更容易重現)。
set -eu
A=$(false)
上面的代碼以錯誤退出 bash。酷,這是我所期望的。
但 :
set -eu
export A=$(false)
不會引發任何錯誤,bash 完全沒問題!它甚至將變數 A 設定為空字串,因此進一步讀取 $A 也不會引發錯誤!
這對我來說真的很奇怪,有沒有辦法獲得預期的行為,也許是 ```set` 的另一種選擇?
我可以這樣做是為了讓它引發錯誤,但我每次都必須這樣寫,所以它對于捕捉錯誤的用處不大:
set -eu
A=$(false)
export A=$A
God bash 很復雜:-)
uj5u.com熱心網友回復:
您沒有收到錯誤,因為它export本身是成功的。我找不到該行為的明確檔案,但是在構建另一個命令的引數時的命令替換似乎是非零退出狀態不會set -e觸發的特殊情況之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478108.html
