Bash:有没有一种简单的方法将大数组分成更小的数组?

5

我想知道在bash中是否有一种简单的方法将一个大数组分成几个较小的数组。目前我正在考虑以下内容:

for ((i = 0; i<= (bigArrayLength/2); i++))  do   
bigArray[i] = smallArray[i]  
done

for ((i = (bigArrayLength/2); i <=bigArrayLength; i++))  
do  
bigArray[i] = secondSmallArray[i]  
done

但是必须有更好的方法来解决这个问题。你有什么建议吗?谢谢!
1个回答

7
如果你的 bash 版本是3.2或更高版本,你可以使用新的"子元素"语法 (${bigArray[@]:index_of_first_element:element_count}),但要小心 - 如果元素值中有任何空格,这可能会在没有预处理的情况下出现严重错误。
因此,想法是类似于:
cnt="${#bigArray[@]}"
let cnt1="$cnt/2"
let cnt2="$cnt - $cnt1 - 1"
# this way we remove the rounding error if the count was odd and account for 0-based indexing

smallArray=( "${bigArray[@]:0:$cnt1}" )
secondSmallArray=( "${bigArray[@]:$cnt1:$cnt2}" )

4
你已经将数组变平了。你需要使用 smallArray=("${bigArray[@]:0:$cnt1}"),这样在元素中包含空格时也可以正常工作。另外,Bash 3.2 和 4 都支持切片操作。 - Dennis Williamson
为什么要用-1?你会失去最后一个元素。 - Eugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接