bash
запускает правую часть конвейера в контексте подоболочки , поэтому изменения в переменных (что и read
происходит) не сохраняются - они умирают, когда это делает подоболочка, в конце команды.
Вместо этого вы можете использовать процесс подстановки :
$ read a b dump < <(echo 1 2 3 4 5)
$ echo $b $a
2 1
В этом случае read
он работает в нашей основной оболочке, а наша производящая команда запускается в подоболочке. <(...)
Синтаксис создает подоболочку и подключает свой выход к трубе, которую мы перенаправлять на вход read
с обычной <
операцией . Поскольку read
запускается в нашей основной оболочке, переменные установлены правильно.
Как указано в комментарии, если ваша цель буквально как-то разделить строку на переменные, вы можете использовать строку здесь :
read a b dump <<<"1 2 3 4 5"
Я предполагаю, что есть нечто большее, чем это, но это лучший вариант, если нет.