我想为每个字母字符设置一个数字。我通常在做这件事时得到我想要的东西
#!/bin/bash
A=4
B=6
c=5
echo $A$A$B$c
但我需要比在每封信之前放$
更简单。
答案 0 :(得分:1)
我认为您最好的选择是使用关联数组。当然,如果您没有可移植性问题并且正在使用bash版本4及更高版本 你可以这样做:
#!/bin/bash
set -e
declare -A map
map[A]=4
map[B]=6
map[C]=5
STR="ABC"
echo -n "${STR}" | while IFS= read -r -n1 char; do
echo -n ${map[${char}]}
done
echo
如果您更喜欢为每个字母创建一个变量,如示例所示,您可以使用eval
命令:
#!/bin/bash
set -e
A=4
B=6
C=5
STR="ABC"
echo -n "${STR}" | while IFS= read -r -n1 char; do
eval "echo -n \$${char}"
done
答案 1 :(得分:1)
使用tr
应用翻译地图。对于您示例中的情况:
echo AABc | tr ABc 465
如果您尝试使用2位数字(例如,如果您尝试用0-25或1-26替换整个字母表),这将无法工作,但您根本不清楚您实际尝试的是什么要做。