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

Bash脚本中如何获取指定值在数组内对应的索引位置

问题原因

你原有代码无法获取位置索引的核心问题是循环遍历的对象错了:for i in ${array[@]} 会直接遍历数组的元素值,循环变量i拿到的永远是11、13、25这类实际存储的内容,不是元素对应的位置下标,所以匹配成功后给result赋值$i,得到的自然是匹配到的元素值25,而非目标位置3。
另外你把result初始值设为0也有隐患:如果目标值刚好是数组第一个元素(下标为0),你后续没法区分是「没匹配到元素返回初始值0」还是「匹配到了第一个元素下标0」。

修正代码

把遍历逻辑改成遍历数组下标即可,完整可运行代码如下:

value=25
array=( 11 13 17 25 36 )
result=-1 # 初始值设为数组不可能存在的非法下标,方便后续判断是否匹配成功

# ${!array[@]} 是Bash专门用来获取数组所有下标的语法,不会返回元素值
for idx in "${!array[@]}"; do
   if [[ ${array[$idx]} -eq $value ]]; then
      result=$idx
      break # 匹配到目标后直接终止循环,不需要浪费资源遍历剩余元素
   fi
done

运行上述代码后,result的输出值就是你需要的3。

补充说明
  • 如果你需要的是日常计数逻辑里1开头的位置(比如示例中25是第4个元素),只需要把赋值行修改为result=$((idx + 1))即可。
  • 如果数组中存在多个和value相等的重复元素,上述代码默认返回第一个匹配元素的下标;如果需要获取最后一个匹配项的位置,删掉循环里的break语句即可。
  • 遍历下标时给${!array[@]}加上双引号,是为了兼容数组元素包含空格、特殊字符的场景,避免内容被Bash错误拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:18:54