Пятничная загогулина (bash)
Ну вот, пришло время для очередной программерской загогулины. Следующий код работать не будет:
#!/usr/bin/bash
echo "one two three" | read a b c
echo "<$a> <$b> <$c>"
Что в нем не так?
Я ожидаю увидеть два ответа. Первый — это просто переписать этот код так, чтобы он заработал. И второй ответ — опционально — объяснение, почему не работает в таком виде.
p.s. второго ответа я пока сам не знаю, поэтому буду с интересом ждать его от вас :)
p.p.s. ответивший верно, как всегда – умничка (-ца (маловероятно)).
UPD: На второй вопрос ответ уже есть:
gds
есть мнение, что переменные, прочитанные read, остаются в переменных “экземпляра” баша, запущенного для выполнения “read a b c”, и не попадают в родительский баш, запустивший “echo … | read a b c”.
gds’у – респект!
А я понял, что в следующий раз надо постить задачки посложнее..
UPD2 свое решение выложу сегодня в конце рабочего дня
UPD3
Кажется, я нечаянно сорвал рабочий день моего начальника, но зато он мне прислал вот такое остроумное решение:
str=`echo "one two three" | (read a b c; echo "a=$a; b=$b; c=$c;") `
eval "$str";
echo "<$a> <$b> <$c>"
Петя, ты отжог :)
Но на самом деле все это можно сделать несколько проще – через “here doc”:
read a b c <<<`echo "one two three"`
echo "<$a> <$b> <$c>"
