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

