Господи, прости меня, знаю, я виноват, я грешен, прости меня! – Ты сам должен себя простить. – Кому я молюсь?..
Ну вот, пришло время не терпит для появляющийся программерской загогулины. Отправляющийся код работать не кончайте:
#!/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>“
18-02
Nathan Hughes - басист который поёт.
Кое-что о металлических дверях
iPhone “
Комментариев нет:
Отправить комментарий