Aes*_*hir 4 bash shell printf sh
我希望 printf 在计算字段宽度时识别多字节字符,以便列正确排列...我找不到这个问题的答案,想知道这里是否有人有任何建议,或者可能是函数/脚本可以解决这个问题。
\n\n这是一个快速而肮脏的例子:
\n\n\nprintf "## %5s %5s %5s ##\\n## %5s %5s %5s ##\\n" \'\' \'*\' \'\' \'\' "\xe2\x80\xa2" \'\'
\n>## * ##
\n>## \xe2\x80\xa2 ##
\n
显然,我想要的结果是:
\n\n\n>## * ##
\n>## \xe2\x80\xa2 ##
\n
有什么办法可以实现这个目标吗?
\n我能想到的最好的是:
\n\nfunction formatwidth\n{\n local STR=$1; shift\n local WIDTH=$1; shift\n local BYTEWIDTH=$( echo -n "$STR" | wc -c )\n local CHARWIDTH=$( echo -n "$STR" | wc -m )\n echo $(( $WIDTH + $BYTEWIDTH - $CHARWIDTH ))\n}\n\nprintf "## %5s %*s %5s ##\\n## %5s %*s %5s ##\\n" \\\n \'\' $( formatwidth "*" 5 ) \'*\' \'\' \\\n \'\' $( formatwidth "\xe2\x80\xa2" 5 ) "\xe2\x80\xa2" \'\'\n
Run Code Online (Sandbox Code Playgroud)\n\n您使用*
宽度说明符将宽度作为参数,并通过添加多字节字符中的附加字节数来计算所需的宽度。
请注意,在 GNU wc 中,-c
返回字节,并且-m
返回(可能是多字节)字符。
归档时间: |
|
查看次数: |
2318 次 |
最近记录: |