[ não é um "especial interno" e, de acordo com POSIX Utility syntax error (option or operand error) de um% não especial especialShall not exit de um shell não interativo ("script").
Tanto quanto por que o shell não sai. O script funciona perfeitamente porque ECHO_ESC está definido como algo sensato, não importa como as ramificações if .
Diferentemente da mensagem de erro sugerida, o erro não vem do \c , mas do == , que é inválido para usar com [ (a igualdade da cadeia é testada com um único = ), mas shells compatíveis [[ (que suporta == ) parece permitir == mesmo para a notação de colchetes simples (por exemplo, bash , ksh ). Note que o código acima não não erro sob bash, então você pode querer considerar repetir sua pergunta.