如何在Linux中更改echo的输出颜色

sat*_*oid 1582 linux bash command-line echo terminal-color

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

我想以红色打印文本.我怎样才能做到这一点?

Tob*_*ias 2107

您可以使用这些ANSI转义码:

Black        0;30     Dark Gray     1;30
Red          0;31     Light Red     1;31
Green        0;32     Light Green   1;32
Brown/Orange 0;33     Yellow        1;33
Blue         0;34     Light Blue    1;34
Purple       0;35     Light Purple  1;35
Cyan         0;36     Light Cyan    1;36
Light Gray   0;37     White         1;37
Run Code Online (Sandbox Code Playgroud)

然后在脚本中使用它们:

#    .---------- constant part!
#    vvvv vvvv-- the code from above
RED='\033[0;31m'
NC='\033[0m' # No Color
printf "I ${RED}love${NC} Stack Overflow\n"
Run Code Online (Sandbox Code Playgroud)

love以红色打印.

从@james-lim的评论中,如果您使用该echo命令,请务必使用-e标志来允许反斜杠转义.

# Continued from above example
echo -e "I ${RED}love${NC} Stack Overflow"
Run Code Online (Sandbox Code Playgroud)

("\n"除非你想添加额外的空行,否则不要在使用echo时添加)

  • 你用"-e"试了吗?它告诉`echo`启用反斜杠转义. (162认同)
  • 在MacOSX中,使用`\ x1B`而不是`\ e`.`\ 033`适用于所有平台. (136认同)
  • 就像msanford为tput所做的那样,这里是(ANSI-Rainbow)`for((i = 30; i <38; i ++)); do echo -e"\ 033 [0;"$ i"m Normal:(0; $ i);\033 [1;"$ i"m Light:(1; $ i)"; done` (17认同)
  • 对我不起作用 - 输出:`\ e [0; 31mHello Stackoverflow\e [0m` (10认同)
  • 在ant属性文件中,为esacpe使用unicode,例如red =\u001b [0; 31m (4认同)
  • 在我的系统上(bash on ubuntu)我发现,对于第一个数字,1表示粗体不亮,3和4表示斜体和下划线,5个闪烁,7也改变背景.我想知道这些地方是否有某种规格? (2认同)
  • `echo -e` 不可移植,而 `printf` 是。使用`printf`。 (2认同)

Dre*_*kes 885

您可以使用awesome tput命令(在Ignacio的答案中建议)为各种事物生成终端控制代码.


用法

tput稍后将讨论特定的子命令.

直接

tput作为一系列命令的一部分调用:

tput setaf 1; echo "this is red text"
Run Code Online (Sandbox Code Playgroud)

如果文本仍然显示错误,请使用;而不是.&&tput

Shell变量

另一种选择是使用shell变量:

red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"
Run Code Online (Sandbox Code Playgroud)

tput产生由终端解释为具有特殊含义的字符序列.他们不会自己出现.请注意,它们仍然可以保存到文件中或由终端以外的程序作为输入处理.

命令替换

使用命令替换tput输出直接插入echo字符串可能更方便:

echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"
Run Code Online (Sandbox Code Playgroud)

上面的命令在Ubuntu上生成:

彩色终端文本的屏幕截图


前景色和背景色命令

tput setab [1-7] # Set the background colour using ANSI escape
tput setaf [1-7] # Set the foreground colour using ANSI escape
Run Code Online (Sandbox Code Playgroud)

颜色如下:

Num  Colour    #define         R G B

0    black     COLOR_BLACK     0,0,0
1    red       COLOR_RED       1,0,0
2    green     COLOR_GREEN     0,1,0
3    yellow    COLOR_YELLOW    1,1,0
4    blue      COLOR_BLUE      0,0,1
5    magenta   COLOR_MAGENTA   1,0,1
6    cyan      COLOR_CYAN      0,1,1
7    white     COLOR_WHITE     1,1,1
Run Code Online (Sandbox Code Playgroud)

还有非ANSI版本的颜色设置功能(setb代替setab,而setf不是setaf)使用不同的数字,这里没有给出.

文本模式命令

tput bold    # Select bold mode
tput dim     # Select dim (half-bright) mode
tput smul    # Enable underline mode
tput rmul    # Disable underline mode
tput rev     # Turn on reverse video mode
tput smso    # Enter standout (bold) mode
tput rmso    # Exit standout mode
Run Code Online (Sandbox Code Playgroud)

光标移动命令

tput cup Y X # Move cursor to screen postion X,Y (top left is 0,0)
tput cuf N   # Move N characters forward (right)
tput cub N   # Move N characters back (left)
tput cuu N   # Move N lines up
tput ll      # Move to last line, first column (if no cup)
tput sc      # Save the cursor position
tput rc      # Restore the cursor position
tput lines   # Output the number of lines of the terminal
tput cols    # Output the number of columns of the terminal
Run Code Online (Sandbox Code Playgroud)

清除并插入命令

tput ech N   # Erase N characters
tput clear   # Clear screen and move the cursor to 0,0
tput el 1    # Clear to beginning of line
tput el      # Clear to end of line
tput ed      # Clear to end of screen
tput ich N   # Insert N characters (moves rest of line forward!)
tput il N    # Insert N lines
Run Code Online (Sandbox Code Playgroud)

其他命令

tput sgr0    # Reset text format to the terminal's default
tput bel     # Play a bell
Run Code Online (Sandbox Code Playgroud)

使用compiz摇摆不定的窗口,该bel命令使终端摆动一秒钟以引起用户的注意.


脚本

tput接受每行包含一个命令的脚本,这些脚本在tput退出之前按顺序执行.

通过回显多行字符串并管道来避免临时文件:

echo -e "setf 7\nsetb 1" | tput -S  # set fg white and bg red
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • 看到 man 1 tput
  • 有关man 5 terminfo这些选项的详细命令列表和详细信息,请参阅参考资料.(相应的tput命令列在Cap-name从第81行开始的巨大表的列中.)

  • 很好的答案.这是最能帮助我的人.对于其他想知道我在想什么的人来说,`$()`是一个[命令替换](http://tldp.org/LDP/abs/html/commandsub.html).所有`tput af 1`都会生成颜色代码字符串,但代码不是可打印字符,因此单独输入`tput af 1`将产生一个空行输出. (11认同)
  • 注意:如果您使用CygWin并且没有tput install`ncurses` (5认同)
  • 有关“tput”颜色的完整列表[查看 Unix StackExchange 上的答案](http://unix.stackexchange.com/a/269085/207392) (4认同)
  • tput也可以在sed中解析,以便将其解析成清晰易读的多彩内容:https://gist.github.com/nickboldt/fab71da10bd5169ffdfa (3认同)
  • 很好的答案,但值得强调的是,如您所示,将 tput 输出存储在 shell 变量中比您随后显示的内联 tput 优越得多。对 tput 的每次插值调用都会产生一个进程,并且对于多行中任何严重使用颜色突出显示等的情况,为每行多次调用 tput 会造成“严重”可见的缓慢。更不用说内联 tput 的可读性要差得多。 (2认同)

Sha*_*iri 715

您可以使用的一些变量:

# Reset
Color_Off='\033[0m'       # Text Reset

# Regular Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White
Run Code Online (Sandbox Code Playgroud)

bash,hexoctal中的转义字符:

|       | bash  | hex    | octal   | NOTE                         |
|-------+-------+--------+---------+------------------------------|
| start | \e    | \x1b   | \033    |                              |
| start | \E    | \x1B   | -       | x cannot be capital          |
| end   | \e[0m | \x1m0m | \033[0m |                              |
| end   | \e[m  | \x1b[m | \033[m  | 0 is appended if you omit it |
|       |       |        |         |                              |
Run Code Online (Sandbox Code Playgroud)

简短的例子:

| color       | bash         | hex            | octal          | NOTE                                  |
|-------------+--------------+----------------+----------------+---------------------------------------|
| start green | \e[32m<text> | \x1b[32m<text> | \033[32m<text> | m is NOT optional                     |
| reset       | <text>\e[0m  | <text>\1xb[0m  | <text>\033[om  | o is optional (do it as best practice |
|             |              |                |                |                                       |
Run Code Online (Sandbox Code Playgroud)

bash异常:

如果您要在特殊的bash变量中使用这些代码

  • PS0
  • PS1
  • PS2(=这是用于提示)
  • PS4

你应该添加额外的转义字符,以便可以正确解释它们.如果没有添加额外的转义字符,它会起作用,但是当您Ctrl + r在历史记录中使用搜索时,您将遇到问题.

bash的例外规则

您应该\[在任何启动ANSI代码之前添加\],并在任何结束之后添加.
示例:
常规使用: \033[32mThis is in green\033[0m
PS0/1/2/4: \[\033[32m\]This is in green\[\033[m\]

\[用于一系列不可打印字符的开始
\]是用于一系列不可打印字符的结束

提示:要记住它,您可以先添加\[\]然后将ANSI代码放在它们之间:
- \[start-ANSI-code\]
-\[end-ANSI-code\]

颜色序列的类型:

  1. 3/4位
  2. 8位
  3. 24位

在深入了解这些颜色之前,您应该了解这些代码的4种模式:

色彩模式

它修改了颜色的样式而不是文本.例如,使颜色变亮或变暗.

  • 0 重启
  • 1; 比平时轻
  • 2; 比平时更暗

此模式不受广泛支持.它完全支持Gnome-Terminal.

2.文本模式

此模式用于修改文本样式而不是颜色.

  • 3; 斜体
  • 4; 强调
  • 5; 眨眼(慢)
  • 6; 闪烁(快)
  • 7; 相反
  • 8; 隐藏
  • 9; 划掉

and are almost supported.
For example KDE-Konsole supports 5; but Gnome-Terminal does not and Gnome supports 8; but KDE does not.

3. foreground mode

This mode is for colorizing the foreground.

4. background mode

This mode is for colorizing the background.

The below table shows a summary of 3/4 bit version of ANSI-color

|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| color-mode | octal    | hex     | bash  | description      | example (= in octal)         | NOTE                                 |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          0 | \033[0m  | \x1b[0m | \e[0m | reset any affect | echo -e "\033[0m"            | 0m equals to m                       |
|          1 | \033[1m  |         |       | light (= bright) | echo -e "\033[1m####\033[m"  | -                                    |
|          2 | \033[2m  |         |       | dark (= fade)    | echo -e "\033[2m####\033[m"  | -                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|  text-mode | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|          3 | \033[3m  |         |       | italic           | echo -e "\033[3m####\033[m"  |                                      |
|          4 | \033[4m  |         |       | underline        | echo -e "\033[4m####\033[m"  |                                      |
|          5 | \033[5m  |         |       | blink (slow)     | echo -e "\033[3m####\033[m"  |                                      |
|          6 | \033[6m  |         |       | blink (fast)     | ?                            | not wildly support                   |
|          7 | \003[7m  |         |       | reverse          | echo -e "\033[7m####\033[m"  | it affects the background/foreground |
|          8 | \033[8m  |         |       | hide             | echo -e "\033[8m####\033[m"  | it affects the background/foreground |
|          9 | \033[9m  |         |       | cross            | echo -e "\033[9m####\033[m"  |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| foreground | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         30 | \033[30m |         |       | black            | echo -e "\033[30m####\033[m" |                                      |
|         31 | \033[31m |         |       | red              | echo -e "\033[31m####\033[m" |                                      |
|         32 | \033[32m |         |       | green            | echo -e "\033[32m####\033[m" |                                      |
|         33 | \033[32m |         |       | yellow           | echo -e "\033[33m####\033[m" |                                      |
|         34 | \033[32m |         |       | blue             | echo -e "\033[34m####\033[m" |                                      |
|         35 | \033[32m |         |       | purple           | echo -e "\033[35m####\033[m" | real name: magenta = reddish-purple  |
|         36 | \033[32m |         |       | cyan             | echo -e "\033[36m####\033[m" |                                      |
|         37 | \033[32m |         |       | white            | echo -e "\033[37m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         38 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
| background | ~        |         |       | ~                | ~                            | ~                                    |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         40 | \033[40m |         |       | black            | echo -e "\033[40m####\033[m" |                                      |
|         41 | \033[41m |         |       | red              | echo -e "\033[41m####\033[m" |                                      |
|         42 | \033[42m |         |       | green            | echo -e "\033[42m####\033[m" |                                      |
|         43 | \033[43m |         |       | yellow           | echo -e "\033[43m####\033[m" |                                      |
|         44 | \033[44m |         |       | blue             | echo -e "\033[44m####\033[m" |                                      |
|         45 | \033[45m |         |       | purple           | echo -e "\033[45m####\033[m" | real name: magenta = reddish-purple  |
|         46 | \033[46m |         |       | cyan             | echo -e "\033[46m####\033[m" |                                      |
|         47 | \033[47m |         |       | white            | echo -e "\033[47m####\033[m" |                                      |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
|         48 | 8/24     |                    This is for special use of 8-bit or 24-bit                                            |                                                                                       |
|------------+----------+---------+-------+------------------+------------------------------+--------------------------------------|
Run Code Online (Sandbox Code Playgroud)

The below table shows a summary of 8 bit version of ANSI-color

|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 | \033[38;5 | \x1b[38;5 | \e[38;5 | standard. normal | echo -e '\033[38;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[38;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[38;5;45m####\033[m'  | has no specific pattern |
|    232-255 |           |           |         |                  | echo -e '\033[38;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
| foreground | octal     | hex       | bash    | description      | example                            | NOTE                    |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
|        0-7 |           |           |         | standard. normal | echo -e '\033[48;5;1m####\033[m'   |                         |
|       8-15 |           |           |         | standard. light  | echo -e '\033[48;5;9m####\033[m'   |                         |
|     16-231 |           |           |         | more resolution  | echo -e '\033[48;5;45m####\033[m'  |                         |
|    232-255 |           |           |         |                  | echo -e '\033[48;5;242m####\033[m' | from black to white     |
|------------+-----------+-----------+---------+------------------+------------------------------------+-------------------------|
Run Code Online (Sandbox Code Playgroud)

The 8-bit fast test:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done

The below table shows a summary of 24 bit version of ANSI-color

|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| foreground | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | R = red     | echo -e '\033[38;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | G = green   | echo -e '\033[38;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[38;2 | \x1b[38;2 | \e[38;2 | B = blue    | echo -e '\033[38;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
| background | octal     | hex       | bash    | description | example                                  | NOTE            |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | R = red     | echo -e '\033[48;2;255;0;02m####\033[m'  | R=255, G=0, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | G = green   | echo -e '\033[48;2;;0;255;02m####\033[m' | R=0, G=255, B=0 |
|      0-255 | \033[48;2 | \x1b[48;2 | \e[48;2 | B = blue    | echo -e '\033[48;2;0;0;2552m####\033[m'  | R=0, G=0, B=255 |
|------------+-----------+-----------+---------+-------------+------------------------------------------+-----------------|
Run Code Online (Sandbox Code Playgroud)

some screen-shots

foreground 8-bit summary in a .gif

foreground.gif

background 8-bit summary in a .gif

background.gif

color summary with their values

在此输入图像描述 在此输入图像描述 在此输入图像描述 在此输入图像描述

blinking on KDE-Terminal

KDE-闪烁

a simple C code that shows you more

cecho_screenshot

a more advanced tool that I developed to deal with these colors:
bline


color-mode shot

褪色正常亮

text mode shot

仅文本模式

combining is OK

结合

more shots


Tips and Tricks for Advanced Users and Programmers:

Can we use these codes in a programming language?

Yes, you can. I experienced in , , , ,

Are they slow down the speed of a program?

I think, NO.

Can we use these on Windows?

3/4-bit Yes, if you compile the code with gcc
some screen-shots on Win-7

How to calculate the length of code?

\033[ = 2, other parts 1

Where can we use these codes?

Anywhere that has a tty interpreter
xterm, gnome-terminal, kde-terminal, mysql-client-CLI and so on.
For example if you want to colorize your output with mysql you can use Perl

#!/usr/bin/perl -n
print "\033[1m\033[31m$1\033[36m$2\033[32m$3\033[33m$4\033[m" while /([|+-]+)|([0-9]+)|([a-zA-Z_]+)|([^\w])/g;
Run Code Online (Sandbox Code Playgroud)

store this code in a file name: pcc (= Perl Colorize Character) and then put the file a in valid PATH then use it anywhere you like.

ls | pcc
df | pcc

inside mysql first register it for pager and then try:

[user2:db2] pager pcc
PAGER set to 'pcc'
[user2:db2] select * from table-name;
Run Code Online (Sandbox Code Playgroud)

PCC

It does NOT handle Unicode.

Do these codes only do colorizing?

No, they can do a lot of interesting things. Try:

echo -e '\033[2K'  # clear the screen and do not move the position
Run Code Online (Sandbox Code Playgroud)

or:

echo -e '\033[2J\033[u' # clear the screen and reset the position
Run Code Online (Sandbox Code Playgroud)

There are a lot of beginners that want to clear the screen with system( "clear" ) so you can use this instead of system(3) call

Are they available in Unicode?

Yes. \u001b

Which version of these colors is preferable?

It is easy to use 3/4-bit, but it is much accurate and beautiful to use 24-bit.
If you do not have experience with so here is a quick tutorial:
24 bits means: 00000000 and 00000000 and 00000000. Each 8-bit is for a specific color.
1..8 is for and 9..16 for and 17..24 for
So in #FF0000 means and here it is: 255;0;0
in #00FF00 means which here is: 0;255;0
Does that make sense? what color you want combine it with these three 8-bit values.


参考:
维基百科
ANSI转义序列
tldp.org
tldp.org
misc.flogisoft.com
一些我不记得的博客/网页

徽章:

  • 没有人真的对这个答案感到惊讶吗? (41认同)
  • 这绝对是名人堂的答案,谢谢。 (9认同)
  • @Benj您好Benj。人们对我有很多评论。但是每次像** Cody Gray **这样的人或其他主持人清理所有内容时。我不知道为什么。他们甚至在不通知我的情况下修改和处理答案:( (2认同)
  • @NeilGuyLindberg **没有八进制文字**此错误是Node.js的一部分,而不是eslist本身。您可以使用x1B [消除它。 (2认同)
  • 我向后滚动很远,以支持这个答案! (2认同)

Ign*_*ams 178

使用tputsetaf能力的参数1.

echo "$(tput setaf 1)Hello, world$(tput sgr0)"
Run Code Online (Sandbox Code Playgroud)

  • 用简单的循环探索颜色(增加`i`的上限以获得更多阴影):`for((i = 0; i <17; i ++)); 做回声"$(tput setaf $ i)这是($ i)$(tput sgr0)"; done` (42认同)
  • 这应该是最好的选择._tput_的作用是它将读取终端信息并为您呈现正确转义的ANSI代码.像`\ 033 [31m`这样的代码会破坏某些终端中的_readline_库. (7认同)
  • 这是 tput 代码的 HOWTO:http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html (3认同)

neo*_*ble 116

echo -e "\033[31m Hello World"
Run Code Online (Sandbox Code Playgroud)

[31m控件的文本颜色:

  • 30- 37设置前景色的颜色
  • 40- 47设置背景颜色

可以在此处找到更完整的颜色代码列表.

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

  • echo -e"\ 033 [31m Hello World",[31m是颜色 (2认同)

wyt*_*ten 37

我对托比亚斯的回答的即兴演奏:

# Color
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # No Color

function red {
    printf "${RED}$@${NC}\n"
}

function green {
    printf "${GREEN}$@${NC}\n"
}

function yellow {
    printf "${YELLOW}$@${NC}\n"
}
Run Code Online (Sandbox Code Playgroud)

$ echo $(红苹果) $(黄香蕉) $(绿猕猴桃) 苹果香蕉猕猴桃


col*_*fix 36

其他答案已经对如何做到这一点给出了很好的解释。我仍然缺少的是对颜色代码的精心安排的概述。维基百科文章“ANSI escape code”对此非常有帮助。然而,由于颜色通常可以配置并且在每个终端中看起来不同,所以我更喜欢有一个可以在终端中调用的函数。为此,我创建了以下函数来显示颜色表并提醒我如何设置它们(其排列方式受到维基文章的启发)。例如,您可以将它们加载到 .bashrc/.zshrc 中或将它们作为脚本放在某处。

\n

256色

\n

在此输入图像描述

\n

在此输入图像描述

\n

由这个 bash/zsh 脚本生成:

\n
function showcolors256() {\n    local row col blockrow blockcol red green blue\n    local showcolor=_showcolor256_${1:-bg}\n    local white="\\033[1;37m"\n    local reset="\\033[0m"\n\n    echo -e "Set foreground color: \\\\\\\\033[38;5;${white}NNN${reset}m"\n    echo -e "Set background color: \\\\\\\\033[48;5;${white}NNN${reset}m"\n    echo -e "Reset color & style:  \\\\\\\\033[0m"\n    echo\n\n    echo 16 standard color codes:\n    for row in {0..1}; do\n        for col in {0..7}; do\n            $showcolor $(( row*8 + col )) $row\n        done\n        echo\n    done\n    echo\n\n    echo 6\xc2\xb76\xc2\xb76 RGB color codes:\n    for blockrow in {0..2}; do\n        for red in {0..5}; do\n            for blockcol in {0..1}; do\n                green=$(( blockrow*2 + blockcol ))\n                for blue in {0..5}; do\n                    $showcolor $(( red*36 + green*6 + blue + 16 )) $green\n                done\n                echo -n "  "\n            done\n            echo\n        done\n        echo\n    done\n\n    echo 24 grayscale color codes:\n    for row in {0..1}; do\n        for col in {0..11}; do\n            $showcolor $(( row*12 + col + 232 )) $row\n        done\n        echo\n    done\n    echo\n}\n\nfunction _showcolor256_fg() {\n    local code=$( printf %03d $1 )\n    echo -ne "\\033[38;5;${code}m"\n    echo -nE " $code "\n    echo -ne "\\033[0m"\n}\n\nfunction _showcolor256_bg() {\n    if (( $2 % 2 == 0 )); then\n        echo -ne "\\033[1;37m"\n    else\n        echo -ne "\\033[0;30m"\n    fi\n    local code=$( printf %03d $1 )\n    echo -ne "\\033[48;5;${code}m"\n    echo -nE " $code "\n    echo -ne "\\033[0m"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

16种颜色

\n

在此输入图像描述

\n

由这个 bash/zsh 脚本生成:

\n
function showcolors16() {\n    _showcolor "\\033[0;30m" "\\033[1;30m" "\\033[40m" "\\033[100m"\n    _showcolor "\\033[0;31m" "\\033[1;31m" "\\033[41m" "\\033[101m"\n    _showcolor "\\033[0;32m" "\\033[1;32m" "\\033[42m" "\\033[102m"\n    _showcolor "\\033[0;33m" "\\033[1;33m" "\\033[43m" "\\033[103m"\n    _showcolor "\\033[0;34m" "\\033[1;34m" "\\033[44m" "\\033[104m"\n    _showcolor "\\033[0;35m" "\\033[1;35m" "\\033[45m" "\\033[105m"\n    _showcolor "\\033[0;36m" "\\033[1;36m" "\\033[46m" "\\033[106m"\n    _showcolor "\\033[0;37m" "\\033[1;37m" "\\033[47m" "\\033[107m"\n}\n\nfunction _showcolor() {\n    for code in $@; do\n        echo -ne "$code"\n        echo -nE "   $code"\n        echo -ne "   \\033[0m  "\n    done\n    echo\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Jor*_*ran 30

这是颜色开关 \033[.看历史.

颜色代码1;32(浅绿色),0;34(蓝色),1;34(浅蓝色)等.

我们用颜色切换终止颜色顺序\033[0m中,没有 -color代码.就像用标记语言打开和关闭标签一样.

  SWITCH="\033["
  NORMAL="${SWITCH}0m"
  YELLOW="${SWITCH}1;33m"
  echo "${YELLOW}hello, yellow${NORMAL}"
Run Code Online (Sandbox Code Playgroud)

简单的色彩echo功能解决方

cecho() {
  local code="\033["
  case "$1" in
    black  | bk) color="${code}0;30m";;
    red    |  r) color="${code}1;31m";;
    green  |  g) color="${code}1;32m";;
    yellow |  y) color="${code}1;33m";;
    blue   |  b) color="${code}1;34m";;
    purple |  p) color="${code}1;35m";;
    cyan   |  c) color="${code}1;36m";;
    gray   | gr) color="${code}0;37m";;
    *) local text="$1"
  esac
  [ -z "$text" ] && local text="$color$2${code}0m"
  echo "$text"
}

cecho "Normal"
cecho y "Yellow!"
Run Code Online (Sandbox Code Playgroud)

  • 我将最后一个 `text` 变量更改为 `text="$color${@: 2}${code}0m"`,这样除了颜色参数之外的整行都将被着色。 (2认同)

And*_*uib 30

我刚刚合并了所有解决方案中的好方法,最后得出:

cecho(){
    RED="\033[0;31m"
    GREEN="\033[0;32m"
    YELLOW="\033[1;33m"
    # ... ADD MORE COLORS
    NC="\033[0m" # No Color

    printf "${!1}${2} ${NC}\n"
}
Run Code Online (Sandbox Code Playgroud)

您可以将其称为:

cecho "RED" "Helloworld"
Run Code Online (Sandbox Code Playgroud)

  • 非常实用,我只需要将 GREEN、YELLOW、NC 的单引号替换为双引号即可使其在我的脚本中工作。 (2认同)
  • 显示文件内容时我遇到了一些问题。用“echo”替换“printf”帮助我解决了这个问题。 (2认同)

Ali*_*ian 28

一种改变颜色的简洁方法echo是定义这样的功能:

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}
Run Code Online (Sandbox Code Playgroud)

用法:

coloredEcho "This text is green" green
Run Code Online (Sandbox Code Playgroud)

或者您可以直接使用Drew的答案中提到的颜色代码:

coloredEcho "This text is green" 2
Run Code Online (Sandbox Code Playgroud)


Pas*_*nus 24

我在查找有关该主题的信息时发现了Shakiba Moshiri的精彩答案……然后我有了一个想法……它最终得到了一个非常好用的功能
所以我必须分享它

https://github.com/ppo/bash-colors

用法: $(c <flags>)在一个echo -eprintf

 ??????????????????????????????????????   ??????????????????????????????????????
 ? Code  ? Style           ? Octal    ?   ? Code  ? Style           ? Octal    ?
 ??????????????????????????????????????   ??????????????????????????????????????
 ?   -   ? Foreground      ? \033[3.. ?   ?   B   ? Bold            ? \033[1m  ?
 ?   _   ? Background      ? \033[4.. ?   ?   U   ? Underline       ? \033[4m  ?
 ??????????????????????????????????????   ?   F   ? Flash/blink     ? \033[5m  ?
 ?   k   ? Black           ? ......0m ?   ?   N   ? Negative        ? \033[7m  ?
 ?   r   ? Red             ? ......1m ?   ??????????????????????????????????????
 ?   g   ? Green           ? ......2m ?   ?   L   ? Normal (unbold) ? \033[22m ?
 ?   y   ? Yellow          ? ......3m ?   ?   0   ? Reset           ? \033[0m  ?
 ?   b   ? Blue            ? ......4m ?   ??????????????????????????????????????
 ?   m   ? Magenta         ? ......5m ?
 ?   c   ? Cyan            ? ......6m ?
 ?   w   ? White           ? ......7m ?
 ??????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)

例子:

echo -e "$(c 0wB)Bold white$(c) and normal"
echo -e "Normal text… $(c r_yB)BOLD red text on yellow background… $(c _w)now on
  white background… $(c 0U) reset and underline… $(c) and back to normal."
Run Code Online (Sandbox Code Playgroud)


Wil*_*hes 22

使用tput计算颜色代码.避免使用ANSI转义码(例如\E[31;1m红色),因为它的可移植性较差.例如,OS X上的Bash不支持它.

BLACK=`tput setaf 0`
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
MAGENTA=`tput setaf 5`
CYAN=`tput setaf 6`
WHITE=`tput setaf 7`

BOLD=`tput bold`
RESET=`tput sgr0`

echo -e "hello ${RED}some red text${RESET} world"
Run Code Online (Sandbox Code Playgroud)


Moj*_*ini 21

Emoji

one thing you can do that is not mentioned in the answer is to use emojis to color your output!

echo : error message
echo : warning message
echo : ok status message
echo : action message
echo : Or anything you like and want to recognize immediately by color
echo : Or with a specific emoji
Run Code Online (Sandbox Code Playgroud)

Bonus Added Value

This method is very useful especially when your source editor for the script supports displaying Unicode. Then you can also see the colorful script even before running it and directly in the source! :

VSCode 演示 Image of a script file inside the VSCode

Note: You may need to pass the Unicode of the emoji directly:

echo $'\U0001f972'  // this emoji: 
Run Code Online (Sandbox Code Playgroud)

Note the capital U for Unicode characters >= 10000


Also, It's very rare but you may need to pass the code like this:

echo <0001f972>
Run Code Online (Sandbox Code Playgroud)

Thanks to @joanis from comments for mentioning this

  • 这是一个有趣的想法,但是表情符号的颜色不会在我的终端中渲染,它们都会转换为当前输出的颜色。 (3认同)

Ahm*_*sud 18

这个问题一遍又一遍地回答:-)但为什么不呢.

首先使用tput在现代环境中比手动注入ASCII代码更容易携带echo -E

这是一个快速bash功能:

 say() {
     echo "$@" | sed \
             -e "s/\(\(@\(red\|green\|yellow\|blue\|magenta\|cyan\|white\|reset\|b\|u\)\)\+\)[[]\{2\}\(.*\)[]]\{2\}/\1\4@reset/g" \
             -e "s/@red/$(tput setaf 1)/g" \
             -e "s/@green/$(tput setaf 2)/g" \
             -e "s/@yellow/$(tput setaf 3)/g" \
             -e "s/@blue/$(tput setaf 4)/g" \
             -e "s/@magenta/$(tput setaf 5)/g" \
             -e "s/@cyan/$(tput setaf 6)/g" \
             -e "s/@white/$(tput setaf 7)/g" \
             -e "s/@reset/$(tput sgr0)/g" \
             -e "s/@b/$(tput bold)/g" \
             -e "s/@u/$(tput sgr 0 1)/g"
  }
Run Code Online (Sandbox Code Playgroud)

现在你可以使用:

 say @b@green[[Success]] 
Run Code Online (Sandbox Code Playgroud)

要得到:

大胆的绿色成功

关于可移植性的说明 tput

第一次tput(1)源代码于1986年9月上传

tput(1) 已经在20世纪90年代的X/Open curses语义中可用(1997年标准具有下面提到的语义).

所以,它(非常)无所不在.

  • tput是符合标准的方式,它完全独立于您了解终端功能.如果终端不支持给定的功能,它将优雅地降级到它能做的任何事情,而不会推出棘手的转义码. (3认同)
  • @Resandro - 那是因为你在`$ PS1`中使用它而没有`\ [... \]`围绕非间距部分?继续使用带有tput字符串的Bash PS1标记. (2认同)

Bru*_*sky 15

I 而不是硬编码特定于您当前终端的转义码,您应该使用tput.

这是我最喜欢的演示脚本:

#!/bin/bash

tput init

end=$(( $(tput colors)-1 ))
w=8
for c in $(seq 0 $end); do
    eval "$(printf "tput setaf %3s   " "$c")"; echo -n "$_"
    [[ $c -ge $(( w*2 )) ]] && offset=2 || offset=0
    [[ $(((c+offset) % (w-offset))) -eq $(((w-offset)-1)) ]] && echo
done

tput init
Run Code Online (Sandbox Code Playgroud)

tput 输出 256 色


kyo*_*kyo 13

感谢@ k-five这个答案

declare -A colors
#curl www.bunlongheng.com/code/colors.png

# Reset
colors[Color_Off]='\033[0m'       # Text Reset

# Regular Colors
colors[Black]='\033[0;30m'        # Black
colors[Red]='\033[0;31m'          # Red
colors[Green]='\033[0;32m'        # Green
colors[Yellow]='\033[0;33m'       # Yellow
colors[Blue]='\033[0;34m'         # Blue
colors[Purple]='\033[0;35m'       # Purple
colors[Cyan]='\033[0;36m'         # Cyan
colors[White]='\033[0;37m'        # White

# Bold
colors[BBlack]='\033[1;30m'       # Black
colors[BRed]='\033[1;31m'         # Red
colors[BGreen]='\033[1;32m'       # Green
colors[BYellow]='\033[1;33m'      # Yellow
colors[BBlue]='\033[1;34m'        # Blue
colors[BPurple]='\033[1;35m'      # Purple
colors[BCyan]='\033[1;36m'        # Cyan
colors[BWhite]='\033[1;37m'       # White

# Underline
colors[UBlack]='\033[4;30m'       # Black
colors[URed]='\033[4;31m'         # Red
colors[UGreen]='\033[4;32m'       # Green
colors[UYellow]='\033[4;33m'      # Yellow
colors[UBlue]='\033[4;34m'        # Blue
colors[UPurple]='\033[4;35m'      # Purple
colors[UCyan]='\033[4;36m'        # Cyan
colors[UWhite]='\033[4;37m'       # White

# Background
colors[On_Black]='\033[40m'       # Black
colors[On_Red]='\033[41m'         # Red
colors[On_Green]='\033[42m'       # Green
colors[On_Yellow]='\033[43m'      # Yellow
colors[On_Blue]='\033[44m'        # Blue
colors[On_Purple]='\033[45m'      # Purple
colors[On_Cyan]='\033[46m'        # Cyan
colors[On_White]='\033[47m'       # White

# High Intensity
colors[IBlack]='\033[0;90m'       # Black
colors[IRed]='\033[0;91m'         # Red
colors[IGreen]='\033[0;92m'       # Green
colors[IYellow]='\033[0;93m'      # Yellow
colors[IBlue]='\033[0;94m'        # Blue
colors[IPurple]='\033[0;95m'      # Purple
colors[ICyan]='\033[0;96m'        # Cyan
colors[IWhite]='\033[0;97m'       # White

# Bold High Intensity
colors[BIBlack]='\033[1;90m'      # Black
colors[BIRed]='\033[1;91m'        # Red
colors[BIGreen]='\033[1;92m'      # Green
colors[BIYellow]='\033[1;93m'     # Yellow
colors[BIBlue]='\033[1;94m'       # Blue
colors[BIPurple]='\033[1;95m'     # Purple
colors[BICyan]='\033[1;96m'       # Cyan
colors[BIWhite]='\033[1;97m'      # White

# High Intensity backgrounds
colors[On_IBlack]='\033[0;100m'   # Black
colors[On_IRed]='\033[0;101m'     # Red
colors[On_IGreen]='\033[0;102m'   # Green
colors[On_IYellow]='\033[0;103m'  # Yellow
colors[On_IBlue]='\033[0;104m'    # Blue
colors[On_IPurple]='\033[0;105m'  # Purple
colors[On_ICyan]='\033[0;106m'    # Cyan
colors[On_IWhite]='\033[0;107m'   # White


color=${colors[$input_color]}
white=${colors[White]}
# echo $white



for i in "${!colors[@]}"
do
  echo -e "$i = ${colors[$i]}I love you$white"
done
Run Code Online (Sandbox Code Playgroud)

结果

在此输入图像描述

希望这张图片可以帮助你为你的bash挑选颜色:D


Oli*_*ing 12

这是我最终使用的sed

echo " [timestamp] production.FATAL Some Message\n" \
"[timestamp] production.ERROR Some Message\n" \
"[timestamp] production.WARNING Some Message\n" \
"[timestamp] production.INFO Some Message\n" \
"[timestamp] production.DEBUG Some Message\n"  | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"
Run Code Online (Sandbox Code Playgroud)

打印如下: Mac sed 输出到颜色


Eri*_*ski 11

这些代码适用于我的Ubuntu盒子:

在此输入图像描述

echo -e "\x1B[31m foobar \x1B[0m"
echo -e "\x1B[32m foobar \x1B[0m"
echo -e "\x1B[96m foobar \x1B[0m"
echo -e "\x1B[01;96m foobar \x1B[0m"
echo -e "\x1B[01;95m foobar \x1B[0m"
echo -e "\x1B[01;94m foobar \x1B[0m"
echo -e "\x1B[01;93m foobar \x1B[0m"
echo -e "\x1B[01;91m foobar \x1B[0m"
echo -e "\x1B[01;90m foobar \x1B[0m"
echo -e "\x1B[01;89m foobar \x1B[0m"
echo -e "\x1B[01;36m foobar \x1B[0m"
Run Code Online (Sandbox Code Playgroud)

这将以不同的颜色打印字母abcd:

echo -e "\x1B[0;93m a \x1B[0m b \x1B[0;92m c \x1B[0;93m d \x1B[0;94m"
Run Code Online (Sandbox Code Playgroud)

对于循环:

for (( i = 0; i < 17; i++ )); 
do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; 
done
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 顺便说一下:这并不依赖于安装特定版本的ubuntu,而是使用PuTTY! (2认同)

Ook*_*ker 9

为了便于阅读

如果您想提高代码的可读性,可以echo首先使用字符串,然后使用sed以下方法添加颜色:

echo 'Hello World!' | sed $'s/World/\e[1m&\e[0m/' 
Run Code Online (Sandbox Code Playgroud)

  • $'<something>'用于bash,而不是sed.它告诉bash将\ e作为转义序列处理,然后放入一个"转义"字符.通常你会看到更简单的形式,比如$'\ t'或$'\n'来获取一个标签或换行符传递给一个命令. (2认同)

NVR*_*VRM 9

没有人注意到ANSI代码7 反转视频的有用性.

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

例如,对于无处不在的红色背景:

 ESC[38;2;?r?;?g?;?b?m  /*Foreground color*/
 ESC[48;2;?r?;?g?;?b?m  /*Background color*/
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

这是用于gif的循环脚本.

 echo -e "\e[38;2;255;0;0mHello world\e[0m"
Run Code Online (Sandbox Code Playgroud)

请参阅https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters


Ami*_*agh 9

要显示具有不同颜色的消息输出,您可以:

echo -e "\033[31;1mYour Message\033[0m"
Run Code Online (Sandbox Code Playgroud)

-黑色 0;30 深灰色 1;30

-红色 0;31 浅红色 1;31

-绿色 0;32 浅绿色 1;32

-棕色/橙色 0;33 黄色 1;33

-蓝色 0;34 浅蓝色 1;34

-紫色 0;35 浅紫色 1;35

-青色 0;36 浅青色 1;36

-浅灰色 0;37 白色 1;37


nac*_*ker 8

到目前为止,我最喜欢的答案是有色的Echo.

只是发布另一个选项,你可以查看这个小工具xcol

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

你就像使用grep一样使用它,例如,它会为每个参数用不同的颜色着色它的标准输入

sudo netstat -putan | xcol httpd sshd dnsmasq pulseaudio conky tor Telegram firefox "[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+" ":[[:digit:]]+" "tcp." "udp." LISTEN ESTABLISHED TIME_WAIT
Run Code Online (Sandbox Code Playgroud)

xcol的例子

请注意,它接受sed将接受的任何正则表达式.

此工具使用以下定义

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple"                       # bright magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text
Run Code Online (Sandbox Code Playgroud)

我在我的脚本中使用这些变量

echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Run Code Online (Sandbox Code Playgroud)


Iva*_*van 7

我用进行彩色打印

#!/bin/bash
#--------------------------------------------------------------------+
#Color picker, usage: printf $BLD$CUR$RED$BBLU'Hello World!'$DEF     |
#-------------------------+--------------------------------+---------+
#       Text color        |       Background color         |         |
#-----------+-------------+--------------+-----------------+         |
# Base color|Lighter shade| Base color   | Lighter shade   |         |
#-----------+-------------+--------------+-----------------+         |
BLK='\e[30m'; blk='\e[90m'; BBLK='\e[40m'; bblk='\e[100m' #| Black   |
RED='\e[31m'; red='\e[91m'; BRED='\e[41m'; bred='\e[101m' #| Red     |
GRN='\e[32m'; grn='\e[92m'; BGRN='\e[42m'; bgrn='\e[102m' #| Green   |
YLW='\e[33m'; ylw='\e[93m'; BYLW='\e[43m'; bylw='\e[103m' #| Yellow  |
BLU='\e[34m'; blu='\e[94m'; BBLU='\e[44m'; bblu='\e[104m' #| Blue    |
MGN='\e[35m'; mgn='\e[95m'; BMGN='\e[45m'; bmgn='\e[105m' #| Magenta |
CYN='\e[36m'; cyn='\e[96m'; BCYN='\e[46m'; bcyn='\e[106m' #| Cyan    |
WHT='\e[37m'; wht='\e[97m'; BWHT='\e[47m'; bwht='\e[107m' #| White   |
#-------------------------{ Effects }----------------------+---------+
DEF='\e[0m'   #Default color and effects                             |
BLD='\e[1m'   #Bold\brighter                                         |
DIM='\e[2m'   #Dim\darker                                            |
CUR='\e[3m'   #Italic font                                           |
UND='\e[4m'   #Underline                                             |
INV='\e[7m'   #Inverted                                              |
COF='\e[?25l' #Cursor Off                                            |
CON='\e[?25h' #Cursor On                                             |
#------------------------{ Functions }-------------------------------+
# Text positioning, usage: XY 10 10 'Hello World!'                   |
XY () { printf "\e[$2;${1}H$3"; }                                   #|
# Print line, usage: line - 10 | line -= 20 | line 'Hello World!' 20 |
line () { printf -v _L %$2s; printf -- "${_L// /$1}"; }             #|
# Create sequence like {0..(X-1)}                                    |
que () { printf -v _N %$1s; _N=(${_N// / 1}); printf "${!_N[*]}"; } #|
#--------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

所有基本颜色都设置为变量,还有一些有用的功能:XY、线和队列。在您的其中一个脚本中获取此脚本并使用所有颜色变量和函数。


Mah*_*ahn 6

为了扩展这个答案,为了我们的懒惰:

function echocolor() { # $1 = string
    COLOR='\033[1;33m'
    NC='\033[0m'
    printf "${COLOR}$1${NC}\n"
}

echo "This won't be colored"
echocolor "This will be colorful"
Run Code Online (Sandbox Code Playgroud)

  • 不要硬编码终端逃逸.使用`tput`; 这就是它的用途! (2认同)

小智 6

您可以在bash脚本中定义颜色,如下所示:

red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'
Run Code Online (Sandbox Code Playgroud)

然后使用它们以您需要的颜色进行打印:

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以“组合”颜色和文本模式。

#!/bin/bash

echo red text / black background \(Reverse\)
echo "\033[31;7mHello world\e[0m";
echo -e "\033[31;7mHello world\e[0m";
echo

echo yellow text / red background
echo "\033[32;41mHello world\e[0m";
echo -e "\033[32;41mHello world\e[0m";
echo "\033[0;32;41mHello world\e[0m";
echo -e "\033[0;32;41mHello world\e[0m";
echo

echo yellow BOLD text / red background
echo "\033[1;32;41mHello world\e[0m";
echo -e "\033[1;32;41mHello world\e[0m";
echo

echo yellow BOLD text underline / red background
echo "\033[1;4;32;41mHello world\e[0m";
echo -e "\033[1;4;32;41mHello world\e[0m";
echo "\033[1;32;4;41mHello world\e[0m";
echo -e "\033[1;32;4;41mHello world\e[0m";
echo "\033[4;32;41;1mHello world\e[0m";
echo -e "\033[4;32;41;1mHello world\e[0m";
echo
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


isn*_*ntn 5

这是我用来查看所有组合并决定哪个读起来很酷的:

for (( i = 0; i < 8; i++ )); do
    for (( j = 0; j < 8; j++ )); do
        printf "$(tput setab $i)$(tput setaf $j)(b=$i, f=$j)$(tput sgr0)\n"
    done
done
Run Code Online (Sandbox Code Playgroud)


Art*_*BIT 5

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

因为存在大量不同的终端控制语言,所以系统通常具有中间通信层。在数据库中查找当前检测到的终端类型的实际代码,然后向API发出标准请求,或者(从外壳程序)向命令发出标准请求。

这些命令之一是tputtput接受一组称为功能名称和任何参数(如果适用)的首字母缩写词,然后在terminfo数据库中为检测到的终端查找正确的转义序列,并打印正确的代码(终端希望能理解)。

来自http://wiki.bash-hackers.org/scripting/terminalcodes

就是说,我编写了一个名为bash-tint的小型帮助程序库,该库在tput之上添加了另一层,使其更易于使用(imho):

例: tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."

将给出以下结果: 在此处输入图片说明


Vis*_*hal 5

如果您使用的是zshbash

black() {
    echo -e "\e[30m${1}\e[0m"
}

red() {
    echo -e "\e[31m${1}\e[0m"
}

green() {
    echo -e "\e[32m${1}\e[0m"
}

yellow() {
    echo -e "\e[33m${1}\e[0m"
}

blue() {
    echo -e "\e[34m${1}\e[0m"
}

magenta() {
    echo -e "\e[35m${1}\e[0m"
}

cyan() {
    echo -e "\e[36m${1}\e[0m"
}

gray() {
    echo -e "\e[90m${1}\e[0m"
}

black 'BLACK'
red 'RED'
green 'GREEN'
yellow 'YELLOW'
blue 'BLUE'
magenta 'MAGENTA'
cyan 'CYAN'
gray 'GRAY'
Run Code Online (Sandbox Code Playgroud)

在线尝试