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

如何简化Bash中遍历list_0至list_99等多个编号数组的代码?

批量遍历命名规律的数组

你有一系列按list_0到list_99命名的数组:

list_0=(1 2 3 4 5 6)
list_1=(7 8 9)
list_2=(22 7 34 88)
# ... 省略中间数组
list_99=(23 67 80)

当前需要手动逐个列出数组名才能遍历所有元素,这里提供几种更简便的实现方式:

方法1:间接扩展(兼容多数Bash版本)

通过循环构造数组名,利用Bash的间接扩展特性获取数组内容:

# 遍历每个数组
for ((x=0; x<=99; x++))
do
    arr_name="list_$x"
    # 遍历当前数组的所有元素
    for num in "${!arr_name[@]}"
    do
        echo "${!arr_name[$num]}"
    done
done

如果需要先收集所有元素再统一处理,可以先把元素存入总数组:

all_elements=()
for ((x=0; x<=99; x++))
do
    arr_name="list_$x"
    all_elements+=("${!arr_name[@]}")
done

# 遍历总数组
for num in "${all_elements[@]}"
do
    echo "$num"
done

方法2:Nameref(Bash 4.3+)

使用Bash的Nameref特性直接关联目标数组,写法更直观:

for ((x=0; x<=99; x++))
do
    # 定义引用变量指向当前数组
    declare -n arr="list_$x"
    # 直接遍历数组元素
    for num in "${arr[@]}"
    do
        echo "$num"
    done
    # 解除引用(可选,避免后续变量冲突)
    unset -n arr
done

方法3:eval拼接(慎用)

如果只是想快速简化原循环写法,可以用eval生成遍历语句,但要注意仅在数组内容安全的场景使用(避免特殊字符导致的问题):

eval "for num in \${list_{0..99}[@]}; do echo \$num; done"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:10