Shell中紧跟在 \ 后面 想用 $ 表达变量的值 失败, 修改文字颜字 要么加 ESC 字符 要么加很多个 \

有一天, 在Telegram群里遇到一条消息, 好想用VPS三色图回应. 但是那个群组里不让发贴纸, 我不知道为什么那一时刻没有用截图, 而是有了一个强烈的想法, 要用ASCII字符拼一个三色图.

一开始还去找了ASCII艺术的工具, 最终发现自己不是搞艺术的料. 不管是工具自动生成还是辅助, 在一个较小的空间内, 都很难弄出我想要的三个圆的感觉. 

于是退而求其次, 用\和/等一些字符拼六边形好了.

于是就有了纯字符版本.

后来觉得, 纯文字版本这六边形和圆形差别太多了, 不能让人一眼看出来这是什么. 所以想把颜色加进去.

一开始是用paint.net涂背景颜色. 但是还是苦于自己没有艺术细胞, 怎么都弄不出自己满意的效果.

于是我想, 不如在shell中输出颜色吧, 这样还cool一点.

说干就干, 先输出纯字符, 是这样子的:

啊, 应该是末尾的\被当成了继续的意思. 那要改为\\. 进一步地, 为了规范, 将里面全部的\都换成了\\

嗯, 不错

接下来就是添加颜色了.

参考之前做一键脚本的经验, 在一段枯燥地复制粘贴之后, 就把颜色的部分添加完了. 一跑起来, 是下面这个样子的:

仔细检查一下, 没弄错啊, 怎么/后面变颜色没问题, 而\\后面变颜色就不行了呢?

Google查了一堆资料, 没找到有用的.

尝试在\\ 与${bg_yellow}之间加个空格, 空格和颜色都正常.

我想到前几天, <Xshell 录制的操作脚本script 执行起来总是卡住 原因是颜色控制符>这件事, 变颜色的不是ESC字符嘛.

于是就把\\${bg_yellow} 改成了 \\ESC[43m 

* 注意, 这里的ESC不是三个字母, 而是一个字符.

再执行, 结果就正常了.


我心想说, 这帮开发Linux的人, 不会逼得用户用ESC字符吧, 手里只有一把键盘的时候, 怎么敲出来?

于是我就尝试一个一个的加\字符. 果然, 加到第二个, 显示正常了.

结论

\\\\\e[43m

\\ESCe[43m

\\\\${bg_yellow}

效果相同。* 注意, 这里的ESC不是三个字母, 而是一个字符.

脚本放在 https://github.com/crazypeace/vps-3-color-ascii 欢迎围观. :) 如果有更好的画三色图或添加颜色的方法也欢迎在本贴或GitHub留言.


update:

我想在shell中输出

末尾的\当然应该写成\\

但是那个\E要写成\\\E

详见 https://github.com/crazypeace/vps-3-color-ascii 


评论

The Hot3 in Last 30 Days

无服务器 自建短链服务 Url-Shorten-Worker 完整的部署教程

ClouDNS .asia免费域名 托管到CloudFlare开CDN白嫖Websocket WS通道翻墙 / desec.io