Linux 使用tr命令将bashshell脚本中的字母转换为数字

Linux 使用tr命令将bashshell脚本中的字母转换为数字,linux,bash,shell,Linux,Bash,Shell,我想把字母表翻译成从0开始的十进制数字。我尝试了上面提到的代码。但是从输入“K”开始输出是错误的。例如,当我输入DAD时,输出为303,但当输入为KILL时,输出为1800,这给了我错误的一个。K应该被转换成11,但只需要1。我的代码不适用于2位十进制数字。简单bash解决方案在stdin上按字母输入-打印每个字母的索引 #!/bin/bash P="ABCDEFGHIJKLMNOPQRSTUVWXYZ" C="012345678910111213141516171819

我想把字母表翻译成从0开始的十进制数字。我尝试了上面提到的代码。但是从输入“K”开始输出是错误的。例如,当我输入DAD时,输出为303,但当输入为KILL时,输出为1800,这给了我错误的一个。K应该被转换成11,但只需要1。我的代码不适用于2位十进制数字。

简单bash解决方案在stdin上按字母输入-打印每个字母的索引

    #!/bin/bash
    P="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    C="012345678910111213141516171819202122232425"

    OUT=`echo $1 | tr $P $C`
    echo $OUT
#填充a-z的P数组
P=({a..z})
#将a-z的C映射填充到索引
声明-A C
对于((i=0;i<${P[*]};++i));做
C[${P[i]}]=$i
完成
#小写输入
字体-l行
而IFS=读取-r行;做
#打印行中每个字母的索引

为了((i=0;这是因为
tr
会逐字翻译。你可能想使用类似
awk
的东西,这会给你更好的cotnrol。那么我如何将这些字母表翻译成从0到25的数字呢?有没有其他方法我可以翻译?你能帮忙吗?还有,你有一个答案。这一部分很好,但我可以单独打印变量是没有用的。当然,在某些情况下,您希望打印和捕获变量,但本例似乎不是其中之一。
# fill P array of a-z
P=({a..z})
# fill C map of a-z to index
declare -A C
for((i=0; i < ${#P[*]}; ++i)); do
  C[${P[i]}]=$i
done
# lowercase input
typeset -l line
while IFS= read -r line; do
# print index of each letter in line
  for((i=0; i<${#line}; ++i)); do
    echo -n "${C[${line:i:1}]}"
  done
  echo
done