我想知道 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
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法来解决它。有什么建议?谢谢!
如果您使用的是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}" )
Run Code Online (Sandbox Code Playgroud)