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.