如何在 bash 中打印八进制值对应的 UTF-8 字符?

如何在 bash 中打印八进制值对应的 UTF-8 字符?

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

相关内容