Funciona para mim exatamente como você descreveu nas perguntas. Você pode querer verificar se as suas fugas estão corretas. Eles podem não ser as fugas corretas para o seu $ TERM, que podem ser facilmente corrigidos usando tput para consultar as fugas corretas para você assim:
COL_RESET=$(tput sgr0)
...
red ) COL_START=$(tput setaf 1)
green ) COL_START=$(tput setaf 2)
blue ) COL_START=$(tput setaf 4)
...
Outro exemplo de uso desses pode ser encontrado aqui .
Você também pode querer mudar a maneira como você chama echo, caso esteja sofrendo interferência. A página man do echo sugere o seguinte:
Due to shell aliases and built-in 'echo' command, using an unadorned 'echo'
interactively or in a script may get you different functionality than that
described here. Invoke it via 'env' (i.e., 'env echo ...') to avoid
interference from the shell.