我想要一个命令/函数,最好是 bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回开头。
例如,输入stack
和2
输出将是cksta
我曾考虑过使用tr
,但我不太清楚如何使其通用,以便与任何单词一起使用,而不仅仅是翻译目标单词中的特定字母。
我想要一个命令/函数,最好是 bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回开头。
例如,输入stack
和2
输出将是cksta
我曾考虑过使用tr
,但我不太清楚如何使其通用,以便与任何单词一起使用,而不仅仅是翻译目标单词中的特定字母。
您可以使用bash
's 的内置字符串操作:
#!/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
另一种常见的方法是将字符串“加倍”,这简化了子字符串:
str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len} # -> cksta
短一点是使用负值,从右数:
string=$1
shift=$2
length=${#string}
echo ${string: -shift}${string:0:length-shift}
因为 :- 有自己的含义,所以你必须在它前面放一个空格。