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
j
must 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.