Não é que eles estejam fora do escopo , ksh
(pelo menos a versão AT & T) não tem essa limitação de bash
. É que read
é chamado duas vezes.
A segunda vez é aquela em que ela falha e tira você do loop.
Como esse segundo read
não lê nada, define a, b e c para a string vazia.
Basta fazer:
echo this that and more | IFS=" " read a b c
echo "a=$a b=$b c=$c"