How to justify and center text in bash?显示了如何在bash中居中文字。它只适用于每个字符占一列,例如英文字母。有许多字符每个占据至少两列,例如“你好”。
如何获取终端中指定字符占用的列数?
答案 0 :(得分:2)
一个简单的选项是GNU wc
。从手册页:
-L
,--max-line-length
打印最大显示宽度
因此,对于您的评论中的示例:
$ wc -L <<< '你好'
4
这可以做成一个小功能:
getwidth () {
for str; do
echo "$str: $(wc -L <<< "$str")"
done
}
可以使用如下:
$ getwidth 你 好 a
你: 2
好: 2
a: 1
This Unix & Linux Q&A有一些好的指示。
答案 1 :(得分:1)
https://github.com/urwid/urwid/blob/master/urwid/old_str_util.py给出了一个替代答案,其中get width
可以通过其unicode序数获得字符的宽度。
widths = [
(126, 1),
(159, 0),
(687, 1),
(710, 0),
(711, 1),
(727, 0),
(733, 1),
(879, 0),
(1154, 1),
(1161, 0),
(4347, 1),
(4447, 2),
(7467, 1),
(7521, 0),
(8369, 1),
(8426, 0),
(9000, 1),
(9002, 2),
(11021, 1),
(12350, 2),
(12351, 1),
(12438, 2),
(12442, 0),
(19893, 2),
(19967, 1),
(55203, 2),
(63743, 1),
(64106, 2),
(65039, 1),
(65059, 0),
(65131, 2),
(65279, 1),
(65376, 2),
(65500, 1),
(65510, 2),
(120831, 1),
(262141, 2),
(1114109, 1),
]
# ACCESSOR FUNCTIONS
def get_width( o ):
"""Return the screen column width for unicode ordinal o."""
global widths
if o == 0xe or o == 0xf:
return 0
for num, wid in widths:
if o <= num:
return wid
return 1