如何将Shell数组中隔位元素拆分到两个独立数组中?
拆分Shell数组为隔位的两个独立数组
针对你的需求,这里提供两种简单的实现方式,直接修改原脚本即可完成拆分:
方法一:遍历索引判断奇偶(兼容所有Bash版本)
这种方法通过遍历数组的每个索引,根据索引的奇偶性将元素分配到两个目标数组:
#!/bin/bash while read line do # 读取输入时给line加引号,避免含空格的输入出错 my_array=("${my_array[@]}" "$line") done # 初始化两个空数组 array1=() array2=() # 遍历原数组的所有索引 for ((i=0; i<${#my_array[@]}; i++)); do if ((i % 2 == 0)); then # 偶数索引(0、2、4...)的元素放入array1 array1+=("${my_array[$i]}") else # 奇数索引(1、3、5...)的元素放入array2 array2+=("${my_array[$i]}") fi done # 验证结果 echo "array1: ${array1[@]}" echo "array2: ${array2[@]}"
运行这个脚本,输入你提供的内容后,输出会是:
array1: 100 200 array2: 1000 2000
方法二:使用Bash数组切片(Bash 4.0+适用)
如果你的环境是Bash 4.0及以上版本,可以利用数组切片的步长特性,更简洁地完成拆分:
#!/bin/bash while read line do my_array=("${my_array[@]}" "$line") done # 从索引0开始,步长为2,提取所有隔位元素到array1 array1=("${my_array[@]:0::2}") # 从索引1开始,步长为2,提取所有隔位元素到array2 array2=("${my_array[@]:1::2}") echo "array1: ${array1[@]}" echo "array2: ${array2[@]}"
说明
- 切片语法
${array[@]:start::step}中,start是起始索引,step是每次跳跃的步数;省略length参数时会取到数组末尾。 - 这种写法比遍历更简洁,但需要确保Bash版本满足要求(可以用
bash --version查看版本)。
内容的提问来源于stack exchange,提问作者john smith
相关产品推荐
相关产品推荐

