在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
关键知识点说明
间接引用的正确姿势
你原来的reallist=$data[@]只是把字符串ar1[@]赋值给了变量,并没有实际拿到数组元素。Bash里要通过变量名引用数组,得用间接扩展语法:${!data[@]},它会解析变量data里的数组名,返回这个数组的所有元素。直接获取指定位置元素
因为你的每个子数组都是固定的两个元素(域名在前,验证码在后),所以直接通过下标0和1就能拿到对应的值,不需要额外循环(除非你要处理元素数量不固定的情况)。简化写法(不用临时数组)
如果不想用临时数组,也可以直接通过间接引用取单个元素: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
相关产品推荐
相关产品推荐

