6

ループを実行して、ループ内で前のアイテムと次のアイテムを取得したいと思います。

現在、私は次のループを使用しています。

for file in $dir;do
    [...do some things...]
done

Cのように、たとえばfile [i-1] / file [i + 1]を実行して、前のアイテムと次のアイテムを取得できますか?これを行う簡単な方法はありますか?

4

2 に答える 2

7
declare -a files=(*)
for (( i = 0; i < ${#files[*]}; ++ i ))
do
  echo ${files[$i-1]} ${files[$i]} ${files[$i+1]}
done

最初の反復では、インデックス-1は最後の要素を出力し、最後の反復では、インデックスmax+1は何も出力しません。

于 2012-12-01T11:57:41.913 に答える
1

これを試して:

previous=
current=
for file in *; do
  previous=$current
  current=$next
  next=$file
  echo $previous \| $current \| $next 
  #process item
done
previous=$current
current=$next
next=
echo $previous \| $current \| $next 
#process last item
于 2012-12-01T11:43:22.617 に答える