Usei o alien para converter um RPM em .deb. NÃO usei a conversão de script do alien; Estou convertendo manualmente. Na verdade, o script vomitou em alguma sintaxe não compatível. Minha pergunta NÃO é sobre como corrigir essa incompatibilidade, mas sim sobre como o script continua a ser executado com êxito, apesar de encontrar um erro.
Aqui está a seção problemática:
if [ "`/bin/echo '\c'`" == "" ]; then
ECHO_ESC="/bin/echo"
else
ECHO_ESC="/bin/echo -e"
fi
Isso causa o seguinte "erro":
./avsetup_mcc: 11: [: \c: unexpected operator
Apesar disso, o script continua funcionando perfeitamente. Então, o que está acontecendo aqui?
Responder1
[
não é um "integrado especial" e, de acordo comPOSIXa Utility syntax error (option or operand error)
de um shell não especial integrado em Shall not exit
um shell não interativo ("script").
Tanto quanto por que o shell não sai. O script funciona perfeitamente porque ECHO_ESC
está definido para algo sensato, não importa como as if
ramificações.
Ao contrário do que a mensagem de erro sugere, o erro não vem do, \c
mas do ==
which é inválido para uso [
(a igualdade de string é testada com um único =
), mas os shells que suportam [[
(que suportam ==
) parecem permitir ==
até mesmo a notação de colchete único (por exemplo bash
, ksh
). Observe que o código acima faznãoerro no bash, então você pode considerar remarcar sua pergunta.