bashcolorsheredoc

coloring in heredocs, bash


If I have previously defined color variable like this:

txtred='\e[1;31m'

How would I use it in heredoc:

    cat << EOM

    [colorcode here] USAGE:

EOM

I mean what should I write in place of [colorcode here] to render that USAGE text red? ${txtred} won't work, as that is what I am using throughout my bash script, outside of heredoc


Solution

  • You need something to interpret the escape sequence which cat won't do. This is why you need echo -e instead of just echo to make it work normally.

    cat << EOM
    $(echo -e "${txtred} USAGE:")
    EOM
    

    works

    but you could also not use escape sequences by using textred=$(tput setaf 1) and then just use the variable directly.

    textred=$(tput setaf 1)
    
    cat <<EOM
    ${textred}USAGE:
    EOM