BASH - почему так отрабатывает скрипт?

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Гость » 2014-10-05 2:14:10

Куда делась единица?

Код: Выделить всё

$ cat test
1
2
$ while read line; do awk '{print $0}'; done < test
2
$

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Гость
проходил мимо

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Гость » 2014-10-05 10:45:20

Еще примеры, как цикл съедает цифру 1:

Код: Выделить всё

$ while read line; do cat; done < test
2
$ while read line; do grep [0-9]; done < test
2
А вот так показывает первую строчку файла:

Код: Выделить всё

$ while read line; do echo $line; done < test
1
2
$


Аватара пользователя
Neus
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Neus » 2014-10-05 18:05:14

Если бы ты взял файл с количеством строк этак 10 - сразу бы понял где накосячил

Гость
проходил мимо

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Гость » 2014-10-06 10:05:52

Neus писал(а):Если бы ты взял файл с количеством строк этак 10 - сразу бы понял где накосячил
Так смысл не в том чтобы обойти это, а чтобы понять для себя почему так поисходит!? :st:

Аватара пользователя
Neus
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Neus » 2014-10-06 10:36:44

Гость писал(а): Так смысл не в том чтобы обойти это, а чтобы понять для себя почему так поисходит!? :st:
А где я предлагал обходить?
скорми скрипту последовательность 1..10 и анализируй сколько раз выполнится цикл и как
если не поймешь - тебе надо азы изучать

Гость
проходил мимо

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Гость » 2014-10-06 22:09:16

Neus писал(а):
Гость писал(а): Так смысл не в том чтобы обойти это, а чтобы понять для себя почему так поисходит!? :st:
А где я предлагал обходить?
скорми скрипту последовательность 1..10 и анализируй сколько раз выполнится цикл и как
если не поймешь - тебе надо азы изучать
Хоть последовательность в тысячу возьми - от этого суть не меняется. Не обрабатывается лишь 1я строка, что было понятно с 1го примера. Понятно что дело в чем-то пустиковом, что знает большинство опытных пользователей bash, но мне пока не ясно с чем это связано.

Аватара пользователя
Neus
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Neus » 2014-10-06 23:35:14

В твоих примерах (1-3) цикл вообще ничего не обрабатывает, да и выполняется 1 раз.
В примере 4 цикл выполнится столько раз сколько строк в файле выводя при этом переменную line в stdout
запусти вот такое на файле > 2 строк

Код: Выделить всё

$ while read line; do tail -n1; done < test

Гость
проходил мимо

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Гость » 2014-10-07 1:36:43

Код: Выделить всё

$ cat test
1
2
3
4
5
6
7
8
9
10
$ while read line; do tail -n 1; done < test
10
$ while read line; do tail -n 10; done < test
2
3
4
5
6
7
8
9
10
В чем соль? Как в моих примерах не работало, так и в твоем не работает.

Аватара пользователя
Neus
капитан
Сообщения: 1976
Зарегистрирован: 2008-09-08 21:59:56

Re: BASH - почему так отрабатывает скрипт?

Непрочитанное сообщение Neus » 2014-10-07 4:57:39

Код: Выделить всё

$ cat test
1
2
3
4
5
6
7
8
9
10
$ while read line; do echo $line; tail -n 1; done < test
1
10
Сколько раз выполнился цикл?
Куда делись строки 2..9?