Bash中如何在for循环内按相同索引同时遍历多个不同数组
Bash 多数组同下标遍历实现方案
你可以直接通过下标遍历的方式实现需求,以下是两种常用的可行写法:
写法1:下标列表遍历(兼容性最好)
该写法支持非连续索引的数组,不需要提前计算数组长度,逻辑更简洁:
# 定义三个数组 a=(banana apple grape) b=(1 2 3) c=(yellow red purple) # 遍历数组a的所有下标 for i in "${!a[@]}"; do echo "${a[$i]} ${b[$i]} ${c[$i]}" done
写法2:算术循环(和你给出的伪代码逻辑完全一致)
如果你习惯类C的循环写法,可以用该实现:
a=(banana apple grape) b=(1 2 3) c=(yellow red purple) # 取数组长度做循环边界 arr_len=${#a[@]} for ((i=0; i<arr_len; i++)); do echo "${a[$i]} ${b[$i]} ${c[$i]}" done
注意事项
- 所有变量引用建议包裹双引号,避免数组元素存在空格时输出异常
- 如果三个数组长度不一致,超出短数组长度的下标位置会输出空值,你可以提前加入长度校验逻辑避免异常:
if [[ ${#a[@]} -ne ${#b[@]} || ${#a[@]} -ne ${#c[@]} ]]; then echo "错误:三个数组长度不匹配" exit 1 fi
两种写法运行后都会输出你预期的结果:
banana 1 yellow apple 2 red grape 3 purple
内容的提问来源于stack exchange,提问作者WX_M
相关产品推荐
相关产品推荐

