在哪里以及如何 Bash 将字符串转换为颜色

Where and How Bash convert strings to colors

我正在 GNU repository 开发 Bash 5.0。我想找到 Bash 读取具有 ASCII 颜色的字符串并将其转换为颜色的位置,例如在以下情况下将“Hello”转换为红色:

root@ubuntu:~/Desktop/bash-5.0# ./bash
root@ubuntu:~/Desktop/bash-5.0# echo $BASH_VERSION                                                         
5.0.0(8)-release
root@ubuntu:~/Desktop/bash-5.0# ./bash -c 'echo -e "3[31mHello\e[0m World"'
Hello World

我在源代码里面搜索了一下,发现有两个文件好像是相关的:

  1. bash-5.0/lib/readline/colors.c - link
  2. bash-5.0/lib/readline/parse-colors.c - link

但它们 不是 ,它们仅在我第一次加载时起作用 Bash 并且您需要在文件 ~/.inputrc 中写入以下行让它工作:

set colored-completion-prefix on
set colored-stats on

知道代码 Bash 中的哪个字符串采用 "3[31mHello" 这样的字符串并将其转换为红色吗?

将任何东西转换为颜色的不是 shell,而是您的 终端。 shell 仅输出 ANSI escape codes,然后由终端拾取。

根据您的观点和哲学解释,3[31mHello 已经 彩色字符串(至少 shell 是)