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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:25:37