您可以使用 terminfo(5) ( man 5 terminfo) 中以“Line Graphics”开头的字符表来执行此操作
Glyph ACS Ascii acsc acsc
Name Name Default Char Value
────────────────────────────────────────────────────────────────────
arrow pointing right ACS_RARROW > + 0x2b
arrow pointing left ACS_LARROW < , 0x2c
arrow pointing up ACS_UARROW ^ - 0x2d
arrow pointing down ACS_DARROW v . 0x2e
solid square block ACS_BLOCK # 0 0x30
diamond ACS_DIAMOND + ` 0x60
checker board (stipple) ACS_CKBOARD : a 0x61
degree symbol ACS_DEGREE \ f 0x66
plus/minus ACS_PLMINUS # g 0x67
board of squares ACS_BOARD # h 0x68
lantern symbol ACS_LANTERN # i 0x69
lower right corner ACS_LRCORNER + j 0x6a
upper right corner ACS_URCORNER + k 0x6b
upper left corner ACS_ULCORNER + l 0x6c
lower left corner ACS_LLCORNER + m 0x6d
large plus or crossover ACS_PLUS + n 0x6e
scan line 1 ACS_S1 ~ o 0x6f
scan line 3 ACS_S3 - p 0x70
horizontal line ACS_HLINE - q 0x71
scan line 7 ACS_S7 - r 0x72
scan line 9 ACS_S9 _ s 0x73
tee pointing right ACS_LTEE + t 0x74
tee pointing left ACS_RTEE + u 0x75
tee pointing up ACS_BTEE + v 0x76
tee pointing down ACS_TTEE + w 0x77
vertical line ACS_VLINE | x 0x78
less-than-or-equal-to ACS_LEQUAL < y 0x79
greater-than-or-equal-to ACS_GEQUAL > z 0x7a
greek pi ACS_PI * { 0x7b
not-equal ACS_NEQUAL ! | 0x7c
UK pound sign ACS_STERLING f } 0x7d
bullet ACS_BULLET o ~ 0x7e
echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
tput smacs
echo '+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~'
tput rmacs
+ , - . 0 ` a f g h i j k l m n o p q r s t u v w y x z { | } ~
+ , - . 0 ♦ # ° ± n ↓ ┘ ┐ ┌ └ ┼ ⎺ ⎻ ─ ⎼ ⎽ ├ ┤ ┴ ┬ ≤ │ ≥ # ≠ £ ·
您可以使用 terminfo(5) (
man 5 terminfo
) 中以“Line Graphics”开头的字符表来执行此操作举个例子
输出
观察
我注意到在我的系统上,并非所有列出的字符实际上都像描述的那样映射。例如
正如另一位用户所评论的那样,它需要特殊的绘图字符。在终端中,可以通过
printf
命令调用它们。例如,要重新创建tree
问题中示例的前两行,它看起来像:有关画框字符的列表,请参阅维基百科页面。
它只使用 uni-code 字符:Unicode 大约是 2^24 个字符。它包括 ASCII 作为其前 128 个字符,然后包括来自所有语言(包括数学)的字符,包括一些虚构的字符、绘图字符、表情符号等等。
您可以在 uni-code 绘图字符中查找字符(例如https://en.wikipedia.org/wiki/Box-drawing_character#Unicode),或者只是复制示例中的字符。
这里有相同的字符。它们在此站点上的渲染效果不佳(可能是字体)。但是,它是相同的文本。如果你粘贴回终端,它看起来会一样。
其他答案提供了另一种方法。我不知道每个的优点和缺点。很高兴听到他们的声音。
我没有
tree
安装,但我从cfdisk
. 我将 cfdisk 的输出粘贴到 od(八进制转储)中。这些符号只是来自我的语言环境的多字节,即LANG=en_GB.UTF-8
.这是一个垂直条,右侧有一个分支,后面是一条水平实线:342 224 234 342 224 200
这是一个右下角,后跟相同的水平:342 224 224 342 224 200
转到此网址:
并输入八进制 342 224 224
或者在这里:
您需要谷歌“将 Unicode 代码点转换为 UTF-8”。
也试试:
echo -e '\0342\0224\0234\0342\0224\0200'
尽管其他答案已经将您指向方框绘图字符,但您应该小心在您的应用程序中自行使用硬编码的终端序列,如这些答案中给出的那样。请注意,可能有些终端根本不理解这些序列,而是会输出一些垃圾。
如果您对此一无所知,请限制使用这些序列或使用库,这能够以统一的方式处理终端尴尬,例如
ncurses
. 这些库还有一个用于绘制水平线的原语(带有适当的后备)。如果您仍然热衷于自己完成这项工作并且没有终端数据库的帮助
libterminfo
,您有以下可能性: