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

在Bash中查找字符串中子串的索引 现有脚本始终返回-1如何修复

问题分析
  • 核心逻辑错误:原脚本的if [[ "$a" == "$b" ]]判断逻辑是原字符串和子串完全相等才执行位置计算,绝大多数场景下条件都不成立,直接进入else分支返回-1。
修正方案

正确的包含判断需要在子串两侧加通配符*,匹配子串前后的任意内容,判断逻辑改为[[ "$a" == *"$b"* ]]即可。额外增加子串非空校验,避免空子串带来的异常输出。
修正后完整脚本:

#!/bin/bash
read a
read b
if [[ -n "$b" && "$a" == *"$b"* ]]; then
    rest=${a#*$b}
    # 计算逻辑为原字符串长度 - 截取后剩余长度 - 子串长度 +1,得到1起始的索引,和示例要求匹配
    echo $(( ${#a} - ${#rest} - ${#b} +1 ))
else
    echo "-1"
fi
效果验证

输入示例字符串:Code Quotient - Get Better at Programming,输入目标子串at,脚本输出为28,和要求的示例输出一致,默认返回子串第一次出现的位置。

内容的提问来源于stack exchange,提问作者Vishal Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:30:04