Выбор ответа 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.

Варианты ответа

  1. 3
  2. 1
  3. 0правильный ответ
  4. Ошибку: переменная не объявлена через local

Разбор

В bash каждая часть пайпа выполняется в подоболочке, и цикл увеличивает свою копию n. После пайпа печатается исходный 0. Исправление: while read -r l; do ...; done < list.txt или shopt -s lastpipe (работает в скрипте, где выключен job control). local нужен только внутри функций.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме