指定为3吧,每行输出3个数组的元素

my_array=(a b c d e f g h i)
i=-3
while [ $i -lt $((${#my_array[@]}-3)) ] ; do
echo ${my_array[@]:i+=3:3}
done

使用的是数组的分片功能。

里面所有的3就是指定的个数。

可以替换成变量N

my_array=(a b c d e f g h i)
N=3
i=-${N}
while [ $i -lt $((${#my_array[@]}-${N})) ] ; do
echo ${my_array[@]:i+=${N}:${N}}
done

第2行把i定义成负值的N,这样在第4行第一次循环时候,i+=${N}的值才得到0,输出才会分片为0到3;即:${my_array[@]:0:3};这是分片显示从第0个数组开始3个元素。运行了一次i+=${N},i的值变成了3,第2次循环输出就是:${my_array[@]:3:3}。循环判断需要把数组的元素的个数减去N,因为初始定义了i为负的N,运行第一次循环才得到i才等于0,不然会输出一个空行。