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"
Я припускаю, що в цьому є більше, але це кращий варіант, якщо його немає.