在heredocs中着色,bash

时间:2014-07-11 15:23:38

标签: bash colors heredoc

如果我之前已经定义了这样的颜色变量:

txtred='\e[1;31m'

我如何在 heredoc

中使用它
    cat << EOM

    [colorcode here] USAGE:

EOM

我的意思是我应该用什么来代替[colorcode here]来渲染该USAGE 文字红? ${txtred}无法工作,因为这是我在整个过程中使用的 bash脚本,在 heredoc

之外

2 个答案:

答案 0 :(得分:8)

你需要一些东西来解释cat不会做的转义序列。这就是为什么您需要echo -e而不仅仅是echo才能使其正常工作。

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

作品

但您也不能使用textred=$(tput setaf 1)来使用转义序列,然后直接使用该变量。

textred=$(tput setaf 1)

cat <<EOM
${textred}USAGE:
EOM

答案 1 :(得分:2)

晚于聚会,但是另一种解决方案是通过命令替换echo -e整个 heredoc 块:

txtred='\e[1;31m'

echo -e "$(
cat << EOM
${txtred} USAGE:
EOM
)" # this must not be on the EOM line

NB:结尾的)"必须换行,否则会破坏 heredoc 结束标记。

如果您要使用多种颜色并且不想使用很多子外壳来设置它们,或者您已经在某个地方定义了转义码并且不想重新发明该选项,则此选项可能是合适的轮。