我正在尝试使用echo命令在终端中打印文本。

我想用红色打印文本。我该怎么做?


当前回答

我们可以为文本和背景使用24位RGB真彩色!

 ESC[38;2;⟨r⟩;⟨g⟩;⟨b⟩m  /*Foreground color*/
 ESC[48;2;⟨r⟩;⟨g⟩;⟨b⟩m  /*Background color*/

红色文本和结束标记示例:

 echo -e "\e[38;2;255;0;0mHello world\e[0m"

发电机:text.addEventListener(“输入”,更新)back.addEventListener(“输入”,更新)函数更新(){让a=text.value.substr(1).match(/.{1,2}/g)设b=back.value.substr(1).match(/.{1,2}/g)out1.textContent=“echo-e\”\\“+`033[38;2;${parseInt(a[0],16)};${parseInt(a[1],16)};${parseInt(a[2],16)}mHello\”`out2.textContent=“echo-e\”\\“+`033[48;2;${parseInt(b[0],16)};${parseInt(b[1],16)};${parseInt(b[2],16)}mWorld!\”`}div{padding:1rem;字体大小:更大}文本颜色:<input type=“COLOR”id=“TEXT”value=“#22333”><br><div id=“out1”></div>BACK COLOR:<input type=“COLOR”id=“BACK”value=“#FFFF00”><br><div id=“out2”>

24位:作为具有16至24位颜色的“真彩色”图形卡Xterm、KDE的Konsole以及所有libvte都变得很常见基于的终端(包括GNOME终端)支持24位前景色和背景色设置https://en.wikipedia.org/wiki/ANSI_escape_code#24-钻头,钻头

在我的脚本中使用它安全吗?

对8位和16位终端将只显示可用调色板范围内的回退颜色,保持最佳对比度,无破损!


此外,没有人注意到ANSI代码7反转视频的有用性。

通过交换前景和背景颜色,它可以在任何终端方案颜色、黑色或白色背景或其他幻想调色板上保持可读性。

例如,对于随处可见的红色背景:

echo -e "\033[31;7mHello world\e[0m";

这是更改终端内置方案时的外观:

这是用于gif的循环脚本。

for i in {30..49};do echo -e "\033[$i;7mReversed color code $i\e[0m Hello world!";done

看见https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Redition)_参数

其他回答

echo -e "\033[31m Hello World"

[31m控制文本颜色:

30-37套前景色40-47套背景色

这里可以找到更完整的颜色代码列表。

最好将字符串末尾的文本颜色重置回\033[0m。

灵感来自@nachoparker的回答,我的.bashrc中有这个:

#### colours
source xcol.sh

### tput foreground
export tpfn=$'\e[0m' # normal
export tpfb=$(tput bold)

## normal colours
export tpf0=$(tput setaf 0) # black
export tpf1=$(tput setaf 1) # red
export tpf2=$(tput setaf 2) # green
export tpf3=$(tput setaf 3) # yellow
export tpf4=$(tput setaf 4) # blue
export tpf5=$(tput setaf 5) # magenta
export tpf6=$(tput setaf 6) # cyan
export tpf7=$(tput setaf 7) # white
# echo "${tpf0}black ${tpf1}red ${tpf2}green ${tpf3}yellow ${tpf4}blue ${tpf5}magenta ${tpf6}cyan ${tpf7}white${tpfn}"

## bold colours
export tpf0b="$tpfb$tpf0" # bold black
export tpf1b="$tpfb$tpf1" # bold red
export tpf2b="$tpfb$tpf2" # bold green
export tpf3b="$tpfb$tpf3" # bold yellow
export tpf4b="$tpfb$tpf4" # bold blue
export tpf5b="$tpfb$tpf5" # bold magenta
export tpf6b="$tpfb$tpf6" # bold cyan
export tpf7b="$tpfb$tpf7" # bold white
# echo "${tpf0b}black ${tpf1b}red ${tpf2b}green ${tpf3b}yellow ${tpf4b}blue ${tpf5b}magenta ${tpf6b}cyan ${tpf7b}white${tpfn}"

出口允许我使用这些tpf。。在Bash脚本中。

我刚刚将所有解决方案中的好捕获合并在一起,最终得出:

cecho(){
    RED="\033[0;31m"
    GREEN="\033[0;32m"  # <-- [0 means not bold
    YELLOW="\033[1;33m" # <-- [1 means bold
    CYAN="\033[1;36m"
    # ... Add more colors if you like

    NC="\033[0m" # No Color

    # printf "${(P)1}${2} ${NC}\n" # <-- zsh
    printf "${!1}${2} ${NC}\n" # <-- bash
}

你可以称之为:

cecho "RED" "Helloworld"

使用具有setaf功能和参数1的tput。

echo "$(tput setaf 1)Hello, world$(tput sgr0)"

您绝对应该在原始ANSI控制序列上使用tput。

因为有大量不同的终端控制语言,通常系统有一个中间通信层。在数据库中查找当前检测到的真实代码终端类型,并向API或(来自shell)转换为命令。其中一个命令是tput。tput接受一组名为功能名称和任何参数(如果合适),然后查找终端中检测到的终端的正确转义序列数据库并打印正确的代码(希望终端理解)。

从…起http://wiki.bash-hackers.org/scripting/terminalcodes

也就是说,我编写了一个名为bash tint的小助手库,它在tput之上添加了另一层,使其使用起来更加简单(imho):

例子:tint“白色(青色(T)洋红色(I)黄色(N)黑色(T))粗体(真的)易于使用。”

将给出以下结果: