Как напечатать восьмеричное значение соответствующего символа 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                
Другие вопросы по тегам