我希望在bash中有一个彩色提示符。 通常,我这样做,例如:
read -p $'\033[1;32m hello world?' helloWorld
这很好,但是在提示字符串中没有扩展变量。现在我想要颜色和扩展变量,但这不起作用:
read -p $'\033[1;32m hello $thisVariableIsNotExpanded ?' helloWorld
我尝试使用echo -e
代替read -p
,但这增加了我不想要的换行符。
那么,如何在读取提示中获得颜色和变量扩展?
答案 0 :(得分:3)
使用双引号使变量得到扩展:
read -p $'\033[1;32m hello '"$thisVariableIsNotExpanded"'?'
# ^ ^
看到它的实际效果:
$ thisVariableIsNotExpanded="gexicide"
$ read -p $'\033[1;32m hello '"$thisVariableIsNotExpanded"'?' helloWorld
hello gexicide?
# ^
# this is green
答案 1 :(得分:1)
您可以使用echo -n
,然后阅读:
echo -ne "\033[1;32m hello $thisVariableIsNotExpanded ?"
或者您可以使用变量来构建提示符:
START=$'\033[1;32m hello '
OTHER="${START}$thisVariableIsNotExpanded ?"
答案 2 :(得分:1)
最好的方法是使用tput
一次来获取转义码(对转义码使用特定于终端的文字是个坏主意 - 并非所有终端都使用相同的代码)。然后只使用普通的双引号,并以通常的方式插入变量。
bold="`tput bold`"
fg_green="`tput setaf 2`"
sgr0="``tput sgr0``"
read -p "${bold}${green}hello $thisVariableIsExpanded ?${sgr0}' helloWorld
注意 - 如果您为文本设置了前景色,您是否考虑过背景色可能是什么?对红色的绿色很难读,绿色对绿色不可能......
答案 3 :(得分:0)
我不确定这是最好的解决方案,但echo -ne
会解释颜色代码而不添加换行符。