To my mind if j=i, which is on first iteration 0, then j is also equal to 0.
Correto, para cada uma das primeiras iterações do loop interno, j será igual a i .
I guess this must change on the second and subsequent iterations.
Também correto (para o loop interno). Para a primeira iteração do loop interno, j terá qualquer valor que i detenha nessa iteração do loop externo.
I know that the value of
jmust differ from the value ofi, as this is what the[ ${values[j]} -le ${values[$lowest]} ]part of the script is calculating.
Da segunda iteração (do loop interno) em diante.
If
j=i, and on the second iteration ifi=1, does this mean thatj++is equal to 2?
Também correto, para a segunda iteração do laço interno 1 .
Agora, para cada uma das primeiras iterações do loop interno, i , j e lowest são todos iguais. Por quê? lowest já estava definido como i . j está definido como i no início da iteração e o teste a seguir definirá lowest a j , que é i , porque está comparando os mesmos elementos. Portanto, a primeira iteração desse loop interno é inútil, poderia ter sido iniciada a partir de i+1 sem nenhum problema. No entanto, não é um erro, apenas desnecessário.
1 Tecnicamente, j++ será 1 , não dois, pois ++ após a variável, chamada de operador pós incremento , aumenta o valor após a variável ter sido avaliado para a expressão. j será 2 após a expressão foi avaliada.