gpt4 book ai didi

bash - printf 字段宽度不支持多字节字符?

转载 作者:行者123 更新时间:2023-11-29 09:41:35 24 4
gpt4 key购买 nike

我希望 printf 在计算字段宽度时识别多字节字符,以便列正确排列......我找不到这个问题的答案,想知道这里是否有人有任何建议,或者可能是函数/负责解决这个问题的脚本。

这是一个简单而粗略的例子:

printf "## %5s %5s %5s ##\n## %5s %5s %5s ##\n" '' '*' '' '' "•" ''>##           *       ##>##         •       ##

显然,我想要结果:

>##           *       ##>##           •       ##

有什么办法可以实现吗?

最佳答案

我能想到的最好的是:

function formatwidth
{
local STR=$1; shift
local WIDTH=$1; shift
local BYTEWIDTH=$( echo -n "$STR" | wc -c )
local CHARWIDTH=$( echo -n "$STR" | wc -m )
echo $(( $WIDTH + $BYTEWIDTH - $CHARWIDTH ))
}

printf "## %5s %*s %5s ##\n## %5s %*s %5s ##\n" \
'' $( formatwidth "*" 5 ) '*' '' \
'' $( formatwidth "•" 5 ) "•" ''

您使用 * 宽度说明符将宽度作为参数,并通过添加多字节字符中的附加字节数来计算您需要的宽度。

请注意,在 GNU wc 中,-c 返回字节,而 -m 返回(可能是多字节)字符。

关于bash - printf 字段宽度不支持多字节字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6885811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com