對不起這個糟糕的標題——不知道如何描述我想要實作的目標。
過去幾天一直在嘗試制作一個 Bash 腳本來實作一個非常簡單的效果,但我不知道怎么做!
腳本的命令列引數是:(1)長度字串n,(2)整數“目標長度” N,和(3)整數偏移量M。此外,可以假設M,N < n. 我需要該程式做的只是以下內容:
如果
M N < n,它應該列印N從 index 開始的字串的字符M。./script.sh "Hello world!" 5 3應該列印lo wo,./script.sh "Hello world!" 9 0應該列印Hello wor,等等。否則(即 if
M N >= n),它應該列印到字串的末尾,然后是從字串開頭開始的許多字符才能滿足目標 lengthN。./script.sh "Hello world!" 5 10應該列印d!Hel,./script.sh "Hello world!" 11 6應該列印world!Hello,等等。
產生的效果是一個被截短或“包裝”的字串,使其始終具有目標長度N。
尤其是第 2 步,這讓我很困惑。我敢肯定,這可能是用子字串語法做一些花哨的事情的簡單案例,但我還沒有弄清楚。我很想發布代碼,但我什至還沒有想到可以使這項作業的偽代碼;我就是這樣卡住的..
uj5u.com熱心網友回復:
假設M和N小于字串的長度,這變得非常容易。字串的實際長度無關緊要;如果你連續重復兩次,任何使用 和 值的子字串N都M將在范圍內,并且不需要檢查它是否換行:
#!/usr/bin/env bash
circular() {
local str="$1$1"
printf "%s\n" "${str:$3:$2}"
}
str='Hello world!'
circular "$str" 9 0
circular "$str" 5 3
circular "$str" 5 10
circular "$str" 11 6
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487299.html
標籤:重击
