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

如何在Bash中截取从开头到指定子串末尾的子字符串

解决方法:直接用参数扩展的替换功能

你可以用Bash的参数扩展替换特性,直接把num2之后的所有内容替换成num2本身,这样就能得到你想要的0123456,完全不需要拼接操作:

num1="0123456789"
num2="56"
result="${num1/${num2}*/$num2}"
echo "$result"  # 输出:0123456

原理说明:

  • ${var/pattern/replacement} 是Bash中用于字符串替换的语法,它会匹配var中第一个符合pattern的子串,并将其替换为replacement。
  • 这里的${num2}*表示匹配num2(也就是56)以及它后面的所有字符(即56789),然后将这部分替换为num2(56),原字符串0123456789就变成了01234 + 56 = 0123456,正好是你需要的结果。

另一种思路:按位置截取

如果你更倾向于按字符位置来操作,也可以先找到num2在num1中的起始位置,再结合num2的长度计算截取的总长度:

start_pos=$(expr index "$num1" "$num2")  # 得到num2第一个字符在num1中的位置(从1开始)
total_length=$((start_pos + ${#num2} - 1))
result="${num1:0:$total_length}"
echo "$result"  # 输出:0123456

不过第一种替换的方法更简洁直接,完全符合你“无需拼接”的要求。

内容的提问来源于stack exchange,提问作者Aditya Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:01:23