Как напечатать восьмеричное значение соответствующего символа UTF-8 в bash?
Я ожидал printf %s '\<octal_character_value>'
сделать трюк, но это не так:
printf %s '\101'
Выходы:
\101
3 ответа
Решение
Предположительно, вы хотите %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 в целом.
Вы можете использовать Awk:
$ awk 'BEGIN {print "\107"}'
G
Или в велюровую библиотеку:
$ velour -n 'print n_chr(+n_baseconv(107, 8, 10))'
G
Он работает с юникодом, пока вы вводите байт.
$ gprintf '\353\200\200' | odview
0000000 8421611
"" ** **
353 200 200
? 80 80
235 128 128
eb 80 80
8421611
0000003
The
%b
оператор не нужен (пока ваши восьмеричные числа не
\0NNN
форма, по крайней мере, в macOS 11.5 встроенный bash3, macOS BSD-UNIX
printf
, а также
gnu-printf 8.32
.
Этот персонаж
U+B000
(n=45056). Разложенный более подробный, но работает так же
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