поток вывода в поток переменных

У меня есть два запроса, которые я выполняю в двух разных системах. Каждый из них возвращает одну строку, и я хочу вывести их в одной строке.

если запросы дают результаты, похожие на:

echo this that and more
echo other great news

Я хочу иметь возможность выполнить некоторое переупорядочение и форматирование, например, так:

echo other this that great news and more 

Если бы я мог выяснить, как отображать вывод строки в несколько переменных, я был бы хорошо. Я заставил это работать:

echo this that and more | while IFS=" ", read a b c
do
  echo a=$a b=$b c=$c
done 

Но как только я выхожу из цикла while, переменные a b и c выходят за рамки и больше не имеют своих значений.

0
19.01.2017, 00:57
2 ответа

Дело не в том, что они выходят за рамки , 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"
1
28.01.2020, 02:46
a=$(echo this...)
b=$(echo other...)
echo -- "$a $b"
0
28.01.2020, 02:46

Теги

Похожие вопросы