Что происходит, когда скрипт обнаруживает ошибку в одной из команд?

Что происходит, когда скрипт обнаруживает ошибку в одной из команд?

Я использовал alien для конвертации RPM в .deb. Я НЕ использовал скрипт конвертации alien; я конвертирую вручную. Действительно, скрипт блевал на какой-то несовместимый синтаксис. Мой вопрос НЕ о том, как исправить эту несовместимость, а скорее о том, как скрипт продолжает успешно выполняться, несмотря на обнаружение ошибки.

Вот проблемный раздел:

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

Это приводит к следующей «ошибке»:

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

Несмотря на это, сценарий продолжает выполняться идеально. Так что же здесь происходит?

решение1

[не является "специальной встроенной функцией", и согласноPOSIXнеспециальной Utility syntax error (option or operand error)встроенной Shall not exitнеинтерактивной оболочки («скрипта»).

Так же, как и то, почему оболочка не выходит. Скрипт функционирует отлично, потому что ECHO_ESCнастроен на что-то разумное, независимо от того, как ifветви.

В отличие от сообщения об ошибке, ошибка возникает не из-за , \cа из-за ==, с которым недопустимо использовать [(равенство строк проверяется с помощью одного =), но оболочки, которые поддерживают [[(который поддерживает ==), похоже, допускают ==даже запись с одной скобкой (например bash, ksh). Обратите внимание, что приведенный выше код ненетошибка в bash, поэтому вам, возможно, стоит подумать о переименовании вашего вопроса.

Связанный контент