1

我想要一个命令/函数,最好是 bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回开头。

例如,输入stack2输出将是cksta

我曾考虑过使用tr,但我不太清楚如何使其通用,以便与任何单词一起使用,而不仅仅是翻译目标单词中的特定字母。

4

3 回答 3

5

您可以使用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
于 2011-08-21T17:19:27.870 回答
2

另一种常见的方法是将字符串“加倍”,这简化了子字符串:

str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len}   # -> cksta
于 2011-08-21T23:37:10.977 回答
0

短一点是使用负值,从右数:

string=$1
shift=$2
length=${#string}
echo ${string: -shift}${string:0:length-shift}

因为 :- 有自己的含义,所以你必须在它前面放一个空格。

于 2011-08-21T17:57:42.587 回答