【发布时间】:2018-03-17 06:12:01
【问题描述】:
我想使用 tr 命令将字符映射到新字符,例如:
echo "hello" | tr '[a-z]' '[b-za-b]'将输出:ifmmp
(小写字母中的每个字母都向右移动一个)
参见下面'[b-za-b]' 的新字符映射:
[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]将映射到:
[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 a]
但是,当我希望它旋转多次时,如何使用变量来控制 tr 命令的旋转值?
例如:移位 1:
echo "hello" | tr '[a-z]' '[b-za-b]'没有变量和:
echo "hello" | tr '[a-z]' '[(a+$var)-za-(a+$var)]'其中 $var=1在这里我有:
(a+$var)-z代表与b-z和.......
a-(a+$var)表示与a-b相同
我尝试将 ascii 值转换为 char 以在 tr 命令中使用,但我认为这是不允许的。
我的问题是 bash 没有解释:
(a+$var) 作为字符 b 当 $var=1 时
(a+$var) 作为字符 c 当 $var=2 时
...等等
如何告诉 bash 将这些方程式解释为 tr 命令的字符
编辑
我尝试用一个数组来做,但它不起作用:
chars=( {a..z} )
var=2
回声“你好” | tr '[a-z]' '[(${chars[var]}-z)(a-${chars[var]})]'
我用:(${chars[var]}-z) 代表b-z where var=1
因为${chars[1]} 是b,但这不起作用。我错过了什么吗?
【问题讨论】:
-
使用具有
ord()和chr()函数的语言、Python、Perl、C 等......