Se você executar a variável interna em um sub shell, isso não afetará a variável externa:
for i in 1 2 3 4; do
(
for i in 1 2 3; do
echo "inner loop ----- $i"
(( i++ ))
done
)
echo $i
done
O que resulta em:
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
1
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
2
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
3
inner loop ----- 1
inner loop ----- 2
inner loop ----- 3
4