Сдвиг буквы в слове - PullRequest
       5

Сдвиг буквы в слове

1 голос
/ 21 августа 2011

Мне нужна команда / функция, предпочтительно bash, которая принимает слово / строку и число и смещает позиции букв в слове на это число, поворачивая переполнение обратно в начало.

например, с помощьювведите stack и 2 на выходе будет cksta

Я думал об использовании tr, но я не мог понять, как сделать его общим, чтобы работать с любым словом,а не просто переводить конкретные буквы из целевого слова.

Ответы [ 3 ]

4 голосов
/ 21 августа 2011

Вы можете использовать встроенную в 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
2 голосов
/ 22 августа 2011

Другим распространенным подходом является «удвоение» строки, что упрощает подстроку:

str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len}   # -> cksta
0 голосов
/ 21 августа 2011

Немного короче использование отрицательных значений, чтобы считать справа:

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

, поскольку: - имеет собственное значение, перед ним необходимо поставить пробел.

...