如何在 shell 中为 printf %s 的输出着色?
How can I colour the output of printf %s in shell?
我在 printf 命令的多行上有一些 ASCII 艺术,例如:
printf %s '
\ /
\ /
\/
'
而且我想让每一行的颜色都不同。我已经尝试了明显的 \e[31m 但这不起作用,因为我需要 printf 命令打印为字符串 (%s) 并忽略反斜杠,因为我的 ASCII 艺术。
我也试过这个:
r="\e1;[31m"
e="\e[0m"
a='\ /'
b=' \ /'
c=' \/'
printf $r%s$e "$a"
运气不好。
这可能吗?
谢谢。
您可以使用应用颜色的命令处理 printf 的输出。例如,
printf %s '
\ /
\ /
\/
/ \
/ \
' | awk 'BEGIN{c=0} {printf "3[3%dm%s3[0m\n", 1 + c, [=10=]; c = (c + 1) % 6;}'
给予
^[[31m^[[0m
^[[32m^[[0m
^[[33m\ /^[[0m
^[[34m \ /^[[0m
^[[35m \/^[[0m
^[[36m / \^[[0m
^[[31m/ \^[[0m
步骤:
- printf 命令通过管道(“|”)将其输出发送到单引号中给出的 awk 脚本。
- 在那个脚本中,我初始化了一个计数器 'c',使用花括号中的第一个块,在特殊关键字 "BEGIN" 之后(执行一次)。
- 大括号中的第二个块为 awk 读取的每一行执行。
- awk 使用自己的 printf 打印转义序列设置颜色、打印文本和重置颜色。
- “$0”符号包含整行(没有换行符)。
- 我在每一行之后使用了一个表达式来更新 'c'(“%”是模数
运算符,使 'c' 的范围从 0 到 5)。
您可以先将颜色存储在变量中,然后使用它们来格式化字符串,如下所示:
#!/bin/bash
RED="\e[0;31m"
GREEN="\e[0;32m"
RESET="\e[0m"
printf "%s $RED%s $GREEN%s $RESET%s\n" BLACK RED GREEN BLACK
这会起作用:
r='3[31m'
e='3[0m'
a='\ /'
b=' \ /'
c=' \/'
printf "$r%s$e\n" "$a" "$b" "$c"
我在 printf 命令的多行上有一些 ASCII 艺术,例如:
printf %s '
\ /
\ /
\/
'
而且我想让每一行的颜色都不同。我已经尝试了明显的 \e[31m 但这不起作用,因为我需要 printf 命令打印为字符串 (%s) 并忽略反斜杠,因为我的 ASCII 艺术。 我也试过这个:
r="\e1;[31m"
e="\e[0m"
a='\ /'
b=' \ /'
c=' \/'
printf $r%s$e "$a"
运气不好。 这可能吗? 谢谢。
您可以使用应用颜色的命令处理 printf 的输出。例如,
printf %s '
\ /
\ /
\/
/ \
/ \
' | awk 'BEGIN{c=0} {printf "3[3%dm%s3[0m\n", 1 + c, [=10=]; c = (c + 1) % 6;}'
给予
^[[31m^[[0m
^[[32m^[[0m
^[[33m\ /^[[0m
^[[34m \ /^[[0m
^[[35m \/^[[0m
^[[36m / \^[[0m
^[[31m/ \^[[0m
步骤:
- printf 命令通过管道(“|”)将其输出发送到单引号中给出的 awk 脚本。
- 在那个脚本中,我初始化了一个计数器 'c',使用花括号中的第一个块,在特殊关键字 "BEGIN" 之后(执行一次)。
- 大括号中的第二个块为 awk 读取的每一行执行。
- awk 使用自己的 printf 打印转义序列设置颜色、打印文本和重置颜色。
- “$0”符号包含整行(没有换行符)。
- 我在每一行之后使用了一个表达式来更新 'c'(“%”是模数 运算符,使 'c' 的范围从 0 到 5)。
您可以先将颜色存储在变量中,然后使用它们来格式化字符串,如下所示:
#!/bin/bash
RED="\e[0;31m"
GREEN="\e[0;32m"
RESET="\e[0m"
printf "%s $RED%s $GREEN%s $RESET%s\n" BLACK RED GREEN BLACK
这会起作用:
r='3[31m'
e='3[0m'
a='\ /'
b=' \ /'
c=' \/'
printf "$r%s$e\n" "$a" "$b" "$c"