Bash:有没有一种方法可以轻松地将大型阵列分解成更小的阵列?

Ste*_*lis 5 arrays bash split

我想知道 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)

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

lyn*_*ynx 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}" )
Run Code Online (Sandbox Code Playgroud)

  • 你已经展平了数组。你需要 `smallArray=("${bigArray[@]:0:$cnt1}")` 并且元素中有空格就可以了。此外,Bash 3.2 和 4 都支持切片。 (4认同)