Bash 如何将数字数组更改为字母表中相应的字母

Bash 如何将数字数组更改为字母表中相应的字母,bash,Bash,我有一个名为variable的数组,其中包含数字1-26,我试图在bash中使用for循环遍历数组中的每个数字,并将其与字母表中的一个字母关联起来,因为tr只允许我翻译字母表的前几个字母。我的代码的一个例子是 注意:我使用的是bash #!/bin/bash for p1 in "${variable[@]}"; do if (( $p1 == 1 )); then newvar+='a' elif (( $p1 == 2 )); then newvar+='b

我有一个名为
variable
的数组,其中包含数字1-26,我试图在bash中使用for循环遍历数组中的每个数字,并将其与字母表中的一个字母关联起来,因为
tr
只允许我翻译字母表的前几个字母。我的代码的一个例子是

注意:我使用的是bash

#!/bin/bash
for p1 in "${variable[@]}"; do
    if (( $p1 == 1 )); then 
    newvar+='a'
    elif (( $p1 == 2 )); then
    newvar+='b'
    ...... and so on down to z
我试图创建包含这些翻译字母的字符串newvar。但是,当我尝试运行此命令时,它只会显示
a
,这是第一个翻译的数字。为什么这样不行?

也许:

# alphabet=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
alphabet=({a..z})

letters=(8 5 12 12 15 23 15 18 12 4)
phrase=''
for i in "${letters[@]}"; do
    phrase+="${alphabet[i-1]}"
done
echo $phrase

这里很好用。将整个脚本复制并粘贴到,然后查看是否存在问题。您应该尝试选择更具描述性的变量名
variable
听起来不像是一个数组,它包含映射到字母的数字
newvar
也没有任何意义。较短的字母表声明:
alphabet=({a..z})
helloworld
for p1 in "${variable[@]}"; do
  chars+=( $((p1 + 96)) )
done

printf '%b' $(printf '\\%03o' ${chars[@]})