while read myVariable; doThe value of
myVariableis 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.