我使用 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似乎甚至允許使用單括號表示法(例如, ) 。請注意,上面的程式碼確實[[
==
==
bash
ksh
不是bash 下出錯,因此您可能需要考慮重新標記您的問題。