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