for
ループ内の次の要素がどうなるかをスパイする (実用的な) 方法はありません。値を別の場所に保存するか、別のタイプのループを使用する必要があります。
位置パラメータまたは配列のいずれかを使用できます。
位置パラメータはスパースではないことが保証されています。
set -- {a..f}
n=1
while ((n<=$#)); do
printf 'cur: %s%.s%s\n' "${!n}" $((++n)) ${!n:+", next: ${!n}"}
done
Bash 配列はまばらです。for
ループを使用して値を直接反復していない場合は、代わりにインデックスを使用する必要があります。
arr=({a..f}) idx=("${!arr[@]}")
while ((n<${#idx[@]})); do
printf 'cur: %s%s\n' "${arr[idx[n]]}" ${idx[++n]:+", next: ${arr[idx[n]]}"}
done
連続した要素を保証できると考えている場合でも、このアプローチは悪い考えではありません。
両方の例の出力:
cur: a, next: b
cur: b, next: c
cur: c, next: d
cur: d, next: e
cur: e, next: f
cur: f