You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本实现固定长度循环字符串截取功能

Bash 固定偏移环绕截取指定长度字符串实现

最简实现思路

不需要拆分两种场景写条件判断,用一个简单的字符串拼接技巧就能覆盖所有需求:

  • 先拿到原字符串长度n
  • 把原字符串拼接自身,得到长度为2n的新字符串——结合题目给定前提M,N < n,所有可能的环绕截取结果都能在这个两倍长度的串里找到,不需要额外补更多内容
  • 直接用Bash原生子串语法,从两倍串的M索引位置开始截N个字符,得到的结果就是目标内容:没超出原串长度时就是普通截断,超出时自动带上原串开头的补全内容,不需要额外计算补位长度。

可直接运行的脚本

#!/bin/bash
# 入参校验
if [ $# -lt 2 ]; then
    echo "调用方式: $0 <输入字符串> <目标长度N> [偏移量M]"
    exit 1
fi
str="$1"
N="$2"
M="${3:-0}" # 偏移量不传时默认取0
# 拼接双份原串后直接截取
double_str="${str}${str}"
res="${double_str:M:N}"
echo "$res"

脚本保存后执行chmod +x script.sh赋予执行权限即可使用。

示例验证

对应列出的所有测试用例,运行结果完全符合预期:

  • 执行./script.sh "Hello world!" 5 3,输出lo wo
  • 执行./script.sh "Hello world!" 9 0,输出Hello wor
  • 执行./script.sh "Hello world!" 5 10,输出d!Hel
  • 执行./script.sh "Hello world!" 11 6,输出world!Hello

补充说明

Bash原生子串截取语法${var:start:length}本身不会做环绕处理,如果截取长度超过原串长度,只会截到原串末尾就停止。提前拼接双份原串的做法,本质是把所有可能需要补位的开头内容提前放到了截取范围内,省去了写分支判断、计算补位长度的步骤,代码更短也更不容易出逻辑错误。


内容的提问来源于stack exchange,提问作者Oh Fiveight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 00:27:23