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

Bash脚本嵌套双循环遍历数组输出异常该如何解决

问题根因

核心错误为循环变量名与数组名完全重复,Bash 中普通变量与数组共享同一作用域的命名空间,不存在变量类型隔离:

  • 外层循环启动时已经读取了region数组的全量值做迭代,所以即使循环过程中region数组被同名循环变量覆盖为字符串,外层遍历逻辑不受影响
  • 第一次内层循环执行时,初始env数组会被同名循环变量逐步覆盖,第一次内层循环结束后,env最终被赋值为字符串stage,原env数组已被销毁
  • 第二次外层循环进入内层时,"${env[@]}"实际是读取字符串stage的数组形式,仅包含1个值,因此只会输出stage
修复方案

只要将循环变量修改为和数组不重名的名称即可,也可以顺便将数组名调整为复数形式降低命名冲突概率,参考修复代码如下:

#!/bin/bash

# 数组名用复数形式更符合语义,也避免和单值变量重名
regions=('us-east-1' 'eu-central-1')
envs=('prod' 'stage')

for reg in "${regions[@]}"
do
        for curr_env in "${envs[@]}"
        do
                echo "$reg"
                echo "$curr_env"
        done
done

如果不想修改原数组名,仅修改循环变量也可正常运行:

#!/bin/bash

region=('us-east-1' 'eu-central-1')
env=('prod' 'stage')

for r in "${region[@]}"
do
        for e in "${env[@]}"
        do
                echo "$r"
                echo "$e"
        done
done

内容的提问来源于stack exchange,提问作者Devops-Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:04