如何在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
相关产品推荐
相关产品推荐

