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
评论
发表评论