我想要一个命令/函数,最好是bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回到开头。
e.g。输入stack
和2
输出为cksta
我已经考虑过使用tr
,但我无法弄清楚如何使其成为通用的,以便处理任何单词,而不仅仅是翻译目标单词中的特定字母。
答案 0 :(得分:4)
您可以使用bash
的内置字符串操作:
#!/bin/bash
string=$1
shift=$2
length=${#string}
echo ${string:$length-$shift:$shift}${string:0:$length-$shift}
示例:
$ ./script stack 1
kstac
$ ./script stack 2
cksta
$ ./script stack 3
ackst
$ ./script stack 4
tacks
答案 1 :(得分:2)
另一种常见的方法是“加倍”字符串,这简化了子字符串:
str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len} # -> cksta
答案 2 :(得分:0)
使用负值时要短一些,从右计算:
string=$1
shift=$2
length=${#string}
echo ${string: -shift}${string:0:length-shift}
因为: - 有自己的意思,你必须在它前面留空。