![如何在 bash 中打印八进制值对应的 UTF-8 字符?](https://linux22.com/image/1049912/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E6%89%93%E5%8D%B0%E5%85%AB%E8%BF%9B%E5%88%B6%E5%80%BC%E5%AF%B9%E5%BA%94%E7%9A%84%20UTF-8%20%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我本来期望printf %s '\<octal_character_value>'
能成功,但是却不行:
printf %s '\101'
输出:
\101
答案1
想必您想要%b
。来自help printf
:
In addition to the standard format specifications described in printf(1),
printf interprets:
%b expand backslash escape sequences in the corresponding argument
和:
$ printf "%b\n" '\101'
A
我不知道它是否适用于通用的 Unicode 字符。
答案2
您可以使用 Awk:
$ awk 'BEGIN {print "\107"}'
G
或者 awk丝绒图书馆:
$ velour -n 'print n_chr(+n_baseconv(107, 8, 10))'
G
答案3
只要你输入字节,它就可以与unicode一起工作。
$ gprintf '\353\200\200' | odview
0000000 8421611
"" ** **
353 200 200
? 80 80
235 128 128
eb 80 80
8421611
0000003
该%b
运算符不是必需的(只要你的八进制不是\0NNN
形式,至少在 macOS 11.5 bash3 内置、macOS BSD-UNIXprintf
以及 中gnu-printf 8.32
)。
这个角色是U+B000
(n=45,056)。分解后的版本更加冗长,但功能相同。
gprintf '\341\204\201\341\205\260\341\206\267' | odview
0000000 3783361761 2262937733 183
ᄁ ** ** ᅰ ** ** ᆷ ** **
341 204 201 341 205 260 341 206 267
? 84 81 ? 85 ? ? 86 ?
225 132 129 225 133 176 225 134 183
e1 84 81 e1 85 b0 e1 86 b7
-511605535 -2032029563 183