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

在Bash脚本中使用for循环时如何获取模拟二维数组的元素值

解决Bash循环中获取子数组元素的问题

我来帮你搞定这个Bash数组的小问题~你的核心需求是在遍历存储数组名的arr时,拿到每个子数组里的域名和验证码,对吧?咱们直接看修改后的代码,再一步步解释为什么原来的写法不行。

完整修改后的脚本

#!/bin/bash
ar1=("moneyclub8.com" "fwdv4u")
ar2=("ghist2811.com" "n9dv03")
ar3=("ghost.com" "eccsml")
arr=(ar1 ar2 ar3);

for data in "${arr[@]}" ; do
    # 用间接引用获取子数组的所有元素,存到临时数组里
    sub_arr=("${!data[@]}")
    # 直接取子数组的第0位(域名)和第1位(验证码)
    domain="${sub_arr[0]}"
    code="${sub_arr[1]}"
    
    # 打印验证结果
    echo "当前子数组:$data"
    echo "域名:$domain,验证码:$code"
    
    # 如果需要遍历子数组的键和值,可以用这段
    echo "--- 子数组键值对 ---"
    for idx in "${!sub_arr[@]}"; do
        echo "键:$idx,值:${sub_arr[$idx]}"
    done
    echo ""
done

关键知识点说明

  1. 间接引用的正确姿势
    你原来的reallist=$data[@]只是把字符串ar1[@]赋值给了变量,并没有实际拿到数组元素。Bash里要通过变量名引用数组,得用间接扩展语法:${!data[@]},它会解析变量data里的数组名,返回这个数组的所有元素。

  2. 直接获取指定位置元素
    因为你的每个子数组都是固定的两个元素(域名在前,验证码在后),所以直接通过下标0和1就能拿到对应的值,不需要额外循环(除非你要处理元素数量不固定的情况)。

  3. 简化写法(不用临时数组)
    如果不想用临时数组,也可以直接通过间接引用取单个元素:

    domain="${!data[0]}"  # 取子数组的第0个元素
    code="${!data[1]}"    # 取子数组的第1个元素
    

运行结果示例

执行脚本后会输出:

当前子数组:ar1
域名:moneyclub8.com,验证码:fwdv4u
--- 子数组键值对 ---
键:0,值:moneyclub8.com
键:1,值:fwdv4u

当前子数组:ar2
域名:ghist2811.com,验证码:n9dv03
--- 子数组键值对 ---
键:0,值:ghist2811.com
键:1,值:n9dv03

当前子数组:ar3
域名:ghost.com,验证码:eccsml
--- 子数组键值对 ---
键:0,值:ghost.com
键:1,值:eccsml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:04:11