当脚本在其中一个命令中遇到错误时会发生什么?

当脚本在其中一个命令中遇到错误时会发生什么?

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

相关内容