echo é um shell embutido no Bash e no traço ( /bin/sh ). Se você executar echo a partir da linha de comando que estiver usando o Bash incorporado, se você estiver executando seu script de shell com sh , estará usando o Dash embutido.
A versão de traço de echo não conhece a opção -e , mas apenas produz qualquer coisa literalmente sem nenhum tratamento especial para \ de sequências.
Use o Bash para executar seu script de shell ou use /bin/echo em vez de echo :
/bin/echo -e "\e[1;31mThis is red text\e[0m"
Para evitar problemas com versões diferentes de echo , convém usar printf . Em contraste com echo printf sempre interpreta \ sequencias mas não adiciona automaticamente um avanço de linha no final, então você tem que acrescentar \n no final se você quiser um.
Como algumas versões de printf não entendem \e , você deve usar 3 :
printf "3[1;31mThis is red text3[0m\n"