Bash shell脚本-有没有办法将数字转换为字符?

Bash shell脚本-有没有办法将数字转换为字符?,bash,shell,Bash,Shell,可能重复: 我想将整数转换为ASCII字符 我们可以用java进行如下转换: int i = 97; //97 is "a" in ASCII char c = (char) i; //c is now "a" 但是,有什么方法可以完成这个shell脚本编写吗 declare -i i=97 c=$(printf \\$(printf '%03o' $i)) echo "char:" $c 编辑: 正如您所看到的,ord()有点棘手——在整数前面加一个引号 单一Uni

可能重复:

我想将整数转换为ASCII字符

我们可以用java进行如下转换:

int i = 97;          //97 is "a" in ASCII
char c = (char) i;   //c is now "a"
但是,有什么方法可以完成这个shell脚本编写吗

declare -i i=97
c=$(printf \\$(printf '%03o' $i))
echo "char:" $c
编辑:

正如您所看到的,
ord()
有点棘手——在整数前面加一个引号

单一Unix规范:“如果前导字符是 单引号或双引号,数值应为 单引号或后面的字符的基础代码集 双引号。”

(摘自)


请参阅。

它可以工作,但我想设置变量,如
var=$(printf\\$(printf'%030'$1))
谢谢您的帮助。您能解释一下部分
printf\\\$(printf'%03o'$i)
吗?@CharlesW。
printf'%03o'$i
从十进制转换为八进制(
97
->
141
)。然后用printf理解的“\\”传递它(即,
printf\\141
),并为八进制序列打印一个字符。从info printf:
“printf”将格式中的“\OOO”解释为指定要打印的字符的八进制数(如果OOO是1到3个八进制数字),将“\xHH”解释为指定要打印的字符的十六进制数(如果HH是1到2个十六进制数字)。
我认为
03
零填充是不必要的?为了完整性:
printf”\x$(printf“%x“$i”)”
#!/bin/bash
# chr() - converts decimal value to its ASCII character representation
# ord() - converts ASCII character to its decimal value

chr() {
  printf \\$(printf '%03o' $1)
}

ord() {
  printf '%d' "'$1"
}

ord A
echo
chr 65
echo