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

Bash数组按4步长迭代索引异常问题求助

问题诊断与修复

你遇到的问题根源在于数组索引的算术运算写法错误,误用了Bash的参数扩展语法代替算术求值。

问题分析

在你的循环代码中,像${dnsAry[${j+1}]}这样的写法是错误的:

  • ${j+1}是Bash的参数扩展语法(${parameter+word}),它的含义是:如果变量j已被设置(无论值是否为空),就返回word(这里是1),否则返回空。
  • 所以当j=4时,${j+1}会返回字符串1,而不是你期望的4+1=5;同理${j+3}会返回3,而不是7——这就是为什么第二次循环里索引7的位置错误地取到了索引3的元素。

正确的写法应该是用$((j+1))来进行算术求值,这样才能得到j加1的数值结果作为数组索引。

修正后的代码

把循环里的数组索引部分修改为算术求值的形式:

#!/bin/bash
# Run as - /tmp/dns.sh qa aqa api
envType=$1
clusterType=$2
projectName=$3
declare -a dnsAry
if [[ "${envType}" =~ "ci" ]]; then
    dnsAry+=("dev.example.com")
    dnsAry+=("${envType}-${projectName}")
    dnsAry+=("${clusterType}-${projectName}")
    dnsAry+=("${envType}-${projectName}-app-and-web-dns")
fi
if [[ "${envType}" =~ "qa" ]]; then
    dnsAry+=("dev.example.com")
    dnsAry+=("${envType}-${projectName}")
    dnsAry+=("${clusterType}-${projectName}")
    dnsAry+=("${envType}-${projectName}-app-dns")
    dnsAry+=("qa.example.com")
    dnsAry+=("${envType}-${projectName}")
    dnsAry+=("${clusterType}-${projectName}")
    dnsAry+=("${envType}-${projectName}-web-dns")
fi
echo -e "Array size : ${#dnsAry[@]}"
echo -e "Array content : ${dnsAry[@]}"
for (( j = 0; j < "${#dnsAry[@]}"; j+=4 ))
do
    echo -e "Loop content $((j)) : ${dnsAry[$j]}"
    echo -e "Loop content $((j + 1)) : ${dnsAry[$((j+1))]}"
    echo -e "Loop content $((j + 2)) : ${dnsAry[$((j+2))]}"
    echo -e "Loop content $((j + 3)) : ${dnsAry[$((j+3))]}"
done

验证结果

运行修正后的代码,输出会和你的期望完全一致:

/tmp/dns.sh qa aqa hapi
Array size : 8
Array content : dev.example.com qa-hapi aqa-hapi qa-hapi-app-dns qa.example.com qa-hapi aqa-hapi qa-hapi-web-dns
Loop content 0 : dev.example.com
Loop content 1 : qa-hapi
Loop content 2 : aqa-hapi
Loop content 3 : qa-hapi-app-dns
Loop content 4 : qa.example.com
Loop content 5 : qa-hapi
Loop content 6 : aqa-hapi
Loop content 7 : qa-hapi-web-dns

额外小提示

你也可以简化循环里的写法,比如先把当前块的起始索引赋值给一个变量,或者用更清晰的方式拆分数组块,不过当前的修正已经能解决核心问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:45