在编写CLi程序的过程中,可能遇到需要打印带颜色的字符串用于高亮显示或是其他原因。linux的终端模拟器支持256色输出,但是我们怎么才能使用呢?你可能知道使用终端转义序列,但C#编译器无法识别这种转义。
1
先给不了解的小伙伴科普下,linux的大部分终端都是支持256色的,这就意味着你可以在终端中打印256中颜色的字符,如下图所示。

如果你随便百度一下你就能知道怎么在shell中打印,例如下面的代码
1 | echo -e "\e[0;38;5;16m黑色字\e[0m" |
在终端中输入后,确实可以打印出黑色的字,改变m前的值还可以有其他的颜色。
它利用的就是\e或 \033转义(其实这两个是一个东西),但是你丢到C#中,要么\e无法转义,要么\033被识别为'\0' + "33"。
解决方法
我随便写了个C的程序
1 |
|
输出为
1 | 27% |
这样就查到了'\e'的ASCII码(百分号是zsh补的换行符)。
那么我们就可以用(char)27来表示'\e'了。
1 | using System; |

这下C#256色那不是有手就行?
