如何在Bash中获取数组除当前循环索引元素外的其余元素
Bash数组遍历:排除当前索引元素生成新数组
方法一:数组切片拼接(高效简洁)
直接利用Bash的数组切片特性,将当前索引前后的元素拼接成新数组:
a=(1 2 3 4 5) for index in "${!a[@]}" do # 拼接当前索引之前和之后的元素切片 b=("${a[@]:0:$index}" "${a[@]:$((index + 1))}") echo "${b[@]}" done
代码说明:
${!a[@]}:获取数组a的所有索引(此处为0 1 2 3 4)${a[@]:0:$index}:截取数组从第0位开始、长度为index的元素,即当前索引之前的所有元素${a[@]:$((index + 1))}:截取数组从index+1位开始到末尾的所有元素- 将两部分切片组合,得到排除当前索引元素的新数组
b
方法二:循环过滤索引(直观易懂)
通过双层循环遍历所有索引,跳过当前要排除的索引,逐个收集元素:
a=(1 2 3 4 5) for current_idx in "${!a[@]}" do b=() # 遍历所有索引,筛选出非当前索引的元素 for idx in "${!a[@]}" do if [ "$idx" -ne "$current_idx" ]; then b+=("${a[$idx]}") fi done echo "${b[@]}" done
输出结果
两种方法都会输出你期望的内容:
1 2 3 4 1 2 3 5 1 2 4 5 1 3 4 5 2 3 4 5
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

