使用printf将整数ASCII值赋给BASH中的字符

价值作品的特点:

$ printf "%d\n" \'A 65 $ 

我有两个问题,第一个是最重要的:

  • 我如何拿65并把它变成A?
  • \ A使用printf将ASCII字符转换为其值。 特定printf的语法,还是在BASH的其他地方使用? (这样的小string很难Google。)

一条线

 printf "\x$(printf %x 65)" 

两行

 set $(printf %x 65) printf "\x$1" 

这里是一个如果你不介意使用awk

 awk 'BEGIN{printf "%c", 65}' 

这工作(以八进制值):

 $ printf '%b' '\101' A 

即使(有些人:不要超过7)序列:

 $ printf '%b' '\'{101..107} ABCDEFG 

允许(十进制)值在任何范围内的一般结构是:

 $ printf '%b' $(printf '\\%03o' {65..122}) ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz 

或者你可以使用字符的hex值:

 $ printf '%b' $(printf '\\x%x' {65..122}) ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz 

你也可以用xxd(使用hex值)取回字符:

 $ echo "41" | xxd -p -r A 

也就是说,一个动作与另一个动作是相反的:

 $ printf "%x" "'A" | xxd -p -r A 

也可以同时使用几个hex值:

 $ echo "41 42 43 44 45 46 47 48 49 4a" | xxd -p -r ABCDEFGHIJ 

或序列(printf在这里用来获取hex值):

 $ printf '%x' {65..90} | xxd -r -p ABCDEFGHIJKLMNOPQRSTUVWXYZ 

甚至使用awk:

 $ echo 65 | awk '{printf("%c",$1)}' A 

即使对于序列:

 $ seq 65 90 | awk '{printf("%c",$1)}' ABCDEFGHIJKLMNOPQRSTUVWXYZ 

对于这种转换,我使用Perl:

 perl -e 'printf "%c\n", 65;' 

对于第二个问题,似乎前导语法( \'A )特定于printf

如果前导字符是单引号或双引号,则该值应为单引号或双引号后面字符的基础代码集中的数字值。

http://pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html

一种select是使用hex或八进制表示法直接input您感兴趣的字符:

 printf "\x41\n" printf "\101\n" 

如果你想保存字符的ASCII值:(我在BASH中这样做,它的工作)

 { char="A" testing=$( printf "%d" "'${char}" ) echo $testing} 

输出:65

这是将65转换为A(通过八进制)的另一种方法:

 help printf # in Bash man bash | less -Ip '^[[:blank:]]*printf' printf "%d\n" '"A' printf "%d\n" "'A" printf '%b\n' "$(printf '\%03o' 65)" 

man bashsearch\'使用(尽pipe在这种情况下是徒劳的):

 man bash | less -Ip "\\\'" # press <n> to go through the matches 

如果您将65转换为hex, 0x41

$ echo -e "\x41" A