我使用 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 下出错,因此您可能需要考虑重新标记您的问题。