LINUX.ORG.RU
решено ФорумAdmin

pipe и циклы ☛ непонятное поведение

 , ,


1

1

Здравствуйте!

Для начала создадим файл tst, состоящий из трёх строк:

for i in {a..c}; do echo $i >> tst; done

Читаем:

~$
>cat tst
a
b
c
Теперь считаем строки, ничего неожиданного:
~$
>a=0; while read; do ((++a)); echo $a; done < tst; echo "Всего строк "$a
1
2
3
Всего строк 3
А вот теперь неожиданность:
~$
>a=0; cat tst | while read; do ((++a)); echo $a; done; echo "Всего строк "$a
1
2
3
Всего строк 0
(В цикле «for in *...» всё то же самое)

Вопрос: Почему переменная «a» после завершения цикла не сохраняет своё значение, что я делаю не так?

Заранее благодарен за ответы!

P.S. Newbie



Последнее исправление: Cave-Canem (всего исправлений: 2)
Ответ на: комментарий от denisv

Большое Спасибо!

Вот так всё работает:

a=0; cat tst | { while read; do ((++a)); echo $a; done; echo "Всего строк "$a; }

Cave-Canem
() автор топика
Ответ на: комментарий от Cave-Canem

Плюс, я надеюсь, что cat tst — это всего-лишь вырожденный пример программы-фильтра, да? В смысле, вы в курсе, что никакие внешние программы для построчного чтения файла не нужны, я надеюсь.

Zmicier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.