2011-08-21 186 views
1

我想要一個命令/函數,最好是bash,它需要一個單詞/字符串和一個數字,並將該單詞中的字母位置移動該數字,將溢出旋轉回開始位置。在單詞中移位字母位置

例如與輸入stack2輸出將cksta

我曾經想過用tr,但我不能完全弄清楚如何使它普遍以便與任何文字工作,而不是僅僅從目標平移特定的字母字。

+0

有沒有辦法用'在一般情況下tr'做到這一點。如果你的字符串保證不包含除了要旋轉的部分之外的任何地方的字符,你可以用'tr'去除它們,但這是一個相當折磨的論點。 – tripleee

回答

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 
+0

完美,謝謝!作爲對其他讀者的一個提示,您可以通過將字符串的長度添加到移位變量中來改變其他方式。 – Jordan

+0

我不明白:length = $ {#string}然後我在這裏找到了一個值得閱讀: 字符串長度。 http://wiki.bash-hackers.org/syntax/pe#substring_removal –

0

短一點是負值的使用,從右邊數:

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

因爲: - 有自己的意思,你必須在它之前留一個空白。

2

另一種常見的方法是「雙重」的字符串,從而簡化了substringery:

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