我想要一個命令/函數,最好是bash,它需要一個單詞/字符串和一個數字,並將該單詞中的字母位置移動該數字,將溢出旋轉回開始位置。在單詞中移位字母位置
例如與輸入stack
和2
輸出將cksta
我曾經想過用tr
,但我不能完全弄清楚如何使它普遍以便與任何文字工作,而不是僅僅從目標平移特定的字母字。
我想要一個命令/函數,最好是bash,它需要一個單詞/字符串和一個數字,並將該單詞中的字母位置移動該數字,將溢出旋轉回開始位置。在單詞中移位字母位置
例如與輸入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
完美,謝謝!作爲對其他讀者的一個提示,您可以通過將字符串的長度添加到移位變量中來改變其他方式。 – Jordan
我不明白:length = $ {#string}然後我在這裏找到了一個值得閱讀: 字符串長度。 http://wiki.bash-hackers.org/syntax/pe#substring_removal –
短一點是負值的使用,從右邊數:
string=$1
shift=$2
length=${#string}
echo ${string: -shift}${string:0:length-shift}
因爲: - 有自己的意思,你必須在它之前留一個空白。
另一種常見的方法是「雙重」的字符串,從而簡化了substringery:
str=stack
len=${#str}
n=2
strstr=$str$str
echo ${strstr:$len-$n:$len} # -> cksta
有沒有辦法用'在一般情況下tr'做到這一點。如果你的字符串保證不包含除了要旋轉的部分之外的任何地方的字符,你可以用'tr'去除它們,但這是一個相當折磨的論點。 – tripleee