我本来期望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