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

但必须有更好的方法来解决它。有什么建议么?谢谢!

4

1 回答 1

6

如果你有bash3.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}" )
于 2012-07-09T17:42:58.393 回答