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

在Bash中声明数组列表并按索引匹配遍历各数组对应元素的方法

Bash 多数组同索引元素组合遍历方案

首先不建议使用你示例中items="${r_Arr[*]} ${u_Arr[*]} ${v_Arr[*]}"的拼接写法:这种写法会把所有数组元素打平为单个字符串,一旦数组元素包含空格、特殊字符,后续拆分时会出现匹配错误。以下是两种可行的实现方案:

方案1:直接通过原始数组遍历(推荐)

如果可以直接访问声明的三个原始数组,直接按索引遍历即可,兼容性最好、准确率最高:

#!/bin/bash
declare -a r_Arr=("east" "west" "north")
declare -a u_Arr=(12 233 131)
declare -a v_Arr=(33 54 34)

# 取数组长度(需保证三个数组长度一致)
arr_len=${#r_Arr[@]}

for ((i=0; i<arr_len; i++)); do
    # 按索引取对应位置的元素组合
    echo "{$r_Arr[$i],${u_Arr[$i]},${v_Arr[$i]}}"
done

运行后输出结果就是你需要的:

{east,12,33}
{west,233,54}
{north,131,34}

方案2:从拼接后的items变量提取

如果你只能拿到拼接后的items变量,需要保证所有数组元素都不包含空白字符,可以按以下方式拆分提取:

# 先把items字符串拆分为一个大数组
all_items=($items)
group_num=3 # 每组元素个数,对应你这里的3个数组
total_len=${#all_items[@]}
single_arr_len=$((total_len / group_num))

for ((i=0; i<single_arr_len; i++)); do
    idx1=$i
    idx2=$((i + single_arr_len))
    idx3=$((i + single_arr_len * 2))
    echo "{${all_items[$idx1]},${all_items[$idx2]},${all_items[$idx3]}}"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:06:03