Bash 移动字母在单词中的位置

Bash 移动字母在单词中的位置,bash,text-processing,tr,Bash,Text Processing,Tr,我想要一个命令/函数,最好是bash,它接受一个单词/字符串和一个数字,并将单词中的字母位置移动该数字,将溢出旋转回起始位置 e、 g.使用输入stack和2时,输出将是cksta 我曾考虑过使用tr,但我不太明白如何使其通用,以便处理任何单词,而不仅仅是翻译目标单词中的特定字母。您可以使用bash的内置字符串操作: #!/bin/bash string=$1 shift=$2 length=${#string} echo ${string:$length-$shift:$shift}${s

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

e、 g.使用输入
stack
2
时,输出将是
cksta


我曾考虑过使用
tr
,但我不太明白如何使其通用,以便处理任何单词,而不仅仅是翻译目标单词中的特定字母。

您可以使用
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

您可以使用
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

略短一点是负值的用法,从右开始计数:

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

因为:-有它自己的意思,你必须在它前面加一个空格。

稍微短一点是负值的用法,从右边开始计算:

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

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

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

str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len}   # -> cksta

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

str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len}   # -> cksta

太好了,谢谢!作为对其他阅读本文的人的提醒,您可以通过将字符串的长度添加到shift变量中,以另一种方式进行移位。太好了,谢谢!作为对其他阅读本文的人的提醒,您可以通过将字符串的长度添加到shift变量中,以另一种方式进行移位。在一般情况下,使用
tr
无法做到这一点。如果您的字符串保证除了要旋转的部分之外,不包含要旋转的字符,您可以使用
tr
删除它们,但这是一个非常复杂的参数。在一般情况下,使用
tr
无法做到这一点。如果您的字符串保证除了要旋转的部分之外,不包含要旋转的字符,您可以使用
tr
删除这些字符,但这是一个非常复杂的参数。