Você não precisa combinar os códigos de cores e o texto a ser enviado para o mesmo comando echo
se tudo o que você está fazendo é colorir a totalidade do texto de uma só vez:
red="$(echo -e "3[0;31m")"
reset="$(echo -e "3[0m")"
echo "$red"
echo "This text is red."
echo "$reset"
Se você estiver tentando alterar os códigos de cores incorporados; você também não precisa extrair toda a sequência de escape. Para alterar o texto vermelho para amarelo, você pode:
echo "$color_festooned_text" | sed 's/;31/;33/g'