while read myVariable; do
The value of
myVariable
is lost when leaving the loop.
Não, myVariable
tem o valor obtido do último read
. O script lê o arquivo, até chegar à posição após a última nova linha. Depois disso, a chamada read
final não recebe nada do arquivo, define myVariable
para a sequência vazia e sai com um valor falso, pois não viu o delimitador (nova linha). Então o loop termina.
Você pode obter um valor não-vazio do read
final se houver uma linha incompleta após a última nova linha:
$ printf 'abc\ndef\nxxx' |
{ while read a; do echo "got: $a"; done; echo "end: $a"; }
got: abc
got: def
end: xxx
Ou use while read a || [ "$a" ]; do ...
para manipular o fragmento de linha final dentro do corpo do loop.