Дело не в том, что они выходят за рамки , ksh
(по крайней мере, версия AT&T) не имеет этого ограничения bash
. Дело в том, что read
вызывается дважды.
Во второй раз он терпит неудачу и вытаскивает вас из цикла.
Поскольку второе чтение
ничего не читает, оно устанавливает a, b и c в пустую строку.
Просто сделайте:
echo this that and more | IFS=" " read a b c
echo "a=$a b=$b c=$c"