使用tr命令在bash shell脚本中从字母转换为数字

时间:2016-08-21 12:19:02

标签: linux bash shell

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

    OUT=`echo $1 | tr $P $C`
    echo $OUT

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

1 个答案:

答案 0 :(得分:2)

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

# 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