當腳本在其中一個命令中遇到錯誤時會發生什麼?

當腳本在其中一個命令中遇到錯誤時會發生什麼?

我使用 Alien 將 RPM 轉換為 .deb。我沒有使用外星人的腳本轉換;我是手工轉換的事實上,該腳本對一些不相容的語法進行了吐槽。我的問題不是關於如何解決這種不相容性,而是關於腳本如何在遇到錯誤的情況下繼續成功執行。

這是有問題的部分:

if [ "`/bin/echo '\c'`" == "" ]; then
   ECHO_ESC="/bin/echo"
else
   ECHO_ESC="/bin/echo -e"
fi

這會導致以下“錯誤”:

./avsetup_mcc: 11: [: \c: unexpected operator

儘管如此,腳本仍然完美執行。那麼,這裡發生了什麼事?

答案1

[不是“特殊內建”,根據POSIXUtility syntax error (option or operand error)非特殊內建Shall not exit非互動式 shell(「腳本」)的一個。

至於為什麼 shell 不退出。該腳本功能完美,因為ECHO_ESC無論if分支如何,它都設定為正常的東西。

與錯誤訊息所暗示的不同,錯誤不是來自於,\c而是==來自於 with 是無效的[(使用單一 測試字串相等性),但是支援(支援)=的 shell似乎甚至允許使用單括號表示法(例如, ) 。請注意,上面的程式碼確實[[====bashksh不是bash 下出錯,因此您可能需要考慮重新標記您的問題。

相關內容