Shell中如何基于分隔符获取变量内指定单词的索引位置
更简洁的实现方案
方案1:awk单行实现(最简短,无需额外变量)
直接一行命令即可输出结果,完全替代你现有代码:
awk -v d="$delimiter" -v w="$word" 'BEGIN{FS=d}{for(i=1;i<=NF;i++)if($i~"^"w){print i-1;exit}}' <<< "$line"
说明:
- 通过
-v参数将shell变量传入awk,将字段分隔符FS设为指定的分隔符 - 遍历所有字段,匹配到以目标单词开头的字段后,直接输出
i-1(awk字段默认从1计数,减1对应0起始索引),匹配到第一个结果就退出,效率高
方案2:纯bash精简写法
保留bash原生语法,比你原有写法缩短近一半:
IFS="$delimiter" read -ra arr <<< "$line" for i in "${!arr[@]}"; do [[ ${arr[i]} == $word* ]] && { echo $i; break; }; done
说明:
- 直接用数组下标遍历语法
${!arr[@]},不需要手动维护index计数变量 - 用逻辑与
&&替代if分支,代码更紧凑
内容的提问来源于stack exchange,提问作者Nir
相关产品推荐
相关产品推荐

