$ reset() { i=$1; }
$ for i in 1 2 3 4 ; do echo -n "$i "; reset 3; echo "$i" ; done;
1 3
2 3
3 3
4 3
i
não é feito em local
em reset
, portanto, a alteração é visível fora da função. Mas a mudança para i
não afeta os valores que i
recebe nas seguintes iterações. As palavras listadas no comando for
são atribuídas a i
, uma por vez, na ordem esperada.
Então, sim, há um "ponteiro oculto" que informa a posição na lista de palavras. Tem que haver, caso contrário, loops com palavras repetidas, como for i in a a a ; do ...
não funcionaria. Há i
obtém o mesmo valor em cada iteração, mas o loop ainda executa um número fixo de iterações.