在read命令中使用颜色和变量

时间:2016-07-07 12:40:58

标签: bash shell

我希望在bash中有一个彩色提示符。 通常,我这样做,例如:

read -p $'\033[1;32m hello world?' helloWorld

这很好,但是在提示字符串中没有扩展变量。现在我想要颜色和扩展变量,但这不起作用:

read -p $'\033[1;32m hello $thisVariableIsNotExpanded ?' helloWorld

我尝试使用echo -e代替read -p,但这增加了我不想要的换行符。

那么,如何在读取提示中获得颜色和变量扩展?

4 个答案:

答案 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会解释颜色代码而不添加换行符。