我将文件列表存储在数组中。我想做的是循环一个进程,该进程将读取数组的N个元素并删除它刚刚读取的所有元素。 Exception是最后一次迭代,当你进入循环的最后一次迭代时 - 无论数组中剩下什么 - 只是将其拆分出来。
th=$1
ar=('f1' 'f2' 'f3' 'f4' 'f5' 'f6')
for ((i=1; i<=$th; i++)); do
<stuff>
if [ "$i" -eq "$th" ]
then
# if its the last iteration of the loop.Whatever remains in the array - spit that out
echo " `echo ${ar[*]}`" >> somefile
# it its anything short of the last iteration.Read N elements of the array at a time
# and then delete them
else
echo " `echo ${ar[*]:0:$N}` " >> somefile
for ((x=0; x<=$N; x++)) ; do
unset ar[$x]
done
fi
结果非常不稳定。即使我使用这种方法并单独测试
for ((x=0; x<=$N; x++)) ; do
unset ar[$x]
done
除了$ Nth元素外,它将删除WHOLE数组 我是shell中的数组新手。任何帮助都很高兴
答案 0 :(得分:2)
尝试以下方法:
#! /bin/bash
th=3
N=2
ar=('f1 f' 'f2' 'f3' 'f4 x' 'f5' 'f6' 'f7')
for ((i=0; i<$th; i++)); do
if (( $i == $(($th - 1)) )) ; then
echo "${ar[*]}"
else
echo "${ar[*]:0:$N}"
ar=( "${ar[@]:$N}" )
fi
done
输出:
f1 f f2
f3 f4 x
f5 f6 f7
注意:强>
unset ar[$x]
之后不会调整指数,因此将数组重建为ar=( "${ar[@]:$N}" )
以强制新指数从零开始会更容易.. <强>更新强>
或者您可以使用以下方法避免重建数组:
#! /bin/bash
th=3
N=2
ar=('f1 f' 'f2' 'f3' 'f4 x' 'f5' 'f6' 'f7')
for ((i=0; i<$th; i++)); do
if (( $i == $(($th - 1)) )) ; then
echo "${ar[*]:$(($i * $N))}"
else
echo "${ar[*]:$(($i * $N)):$N}"
fi
done