O problema pode ser visto facilmente iniciando o script como
bash -vx ./script
Você usa a mesma variável no programa principal e em uma função que é realmente uma má ideia. bufferDisplay
deixa i no valor 6 após o qual o i++
do loop principal é executado.
A melhor maneira de evitar isso é usar um espaço de nome separado em todas as funções. Cada variável em uma função que não é intencionalmente aquela do espaço de nome externo deve ser declarada como
local i
Você também pode usar nomes diferentes; especialmente com um pequeno propograma. Mas a abordagem local
é menos propensa a erros.