Выбор ответа Middle Потоки и пайпы обновлено
Переменная после while read в пайпе
Вопрос
Что выведет скрипт на bash, если в list.txt три строки?
n=0
cat list.txt | while read -r l; do n=$((n+1)); done
echo $n
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 0. В bash каждая часть пайпа выполняется в подоболочке, и цикл увеличивает свою копию n.
Варианты ответа
310правильный ответ- Ошибку: переменная не объявлена через
local
Разбор
В bash каждая часть пайпа выполняется в подоболочке, и цикл увеличивает свою копию n. После пайпа печатается исходный 0. Исправление: while read -r l; do ...; done < list.txt или shopt -s lastpipe (работает в скрипте, где выключен job control). local нужен только внутри функций.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.