如果我之前已经定义了这样的颜色变量:
txtred='\e[1;31m'
我如何在 heredoc :
中使用它 cat << EOM
[colorcode here] USAGE:
EOM
我的意思是我应该用什么来代替[colorcode here]
来渲染该USAGE
文字红? ${txtred}
无法工作,因为这是我在整个过程中使用的
bash脚本,在 heredoc
答案 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 结束标记。
如果您要使用多种颜色并且不想使用很多子外壳来设置它们,或者您已经在某个地方定义了转义码并且不想重新发明该选项,则此选项可能是合适的轮。