在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
相关产品推荐
相关产品推荐

