Primeiro, $ sq recebe um número aleatório de um para o número de argumentos da função. Então, o argumento sq-th é atribuído a ele pela indirecção. Por exemplo, se sq=4 , então ${!sq} significa ${4} , ou seja, $4 .
Além disso, o valor de $ last (ou 666 se não definido) nunca é "movido", se estiver selecionado, o loop não para e outro valor é gerado.