Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2014-10-05 2:14:10
Куда делась единица?
Код: Выделить всё
$ cat test
1
2
$ while read line; do awk '{print $0}'; done < test
2
$
Гость
-
Хостинг HostFood.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/
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 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
- капитан
- Сообщения: 1961
- Зарегистрирован: 2008-09-08 21:59:56
Непрочитанное сообщение
Neus » 2014-10-05 18:05:14
Если бы ты взял файл с количеством строк этак 10 - сразу бы понял где накосячил
Neus
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 2014-10-06 10:05:52
Neus писал(а):Если бы ты взял файл с количеством строк этак 10 - сразу бы понял где накосячил
Так смысл не в том чтобы обойти это, а чтобы понять для себя почему так поисходит!?

Гость
-
Neus
- капитан
- Сообщения: 1961
- Зарегистрирован: 2008-09-08 21:59:56
Непрочитанное сообщение
Neus » 2014-10-06 10:36:44
Гость писал(а):
Так смысл не в том чтобы обойти это, а чтобы понять для себя почему так поисходит!?

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

А где я предлагал обходить?
скорми скрипту последовательность 1..10 и анализируй сколько раз выполнится цикл и как
если не поймешь - тебе надо азы изучать
Хоть последовательность в тысячу возьми - от этого суть не меняется. Не обрабатывается лишь 1я строка, что было понятно с 1го примера. Понятно что дело в чем-то пустиковом, что знает большинство опытных пользователей bash, но мне пока не ясно с чем это связано.
Гость
-
Neus
- капитан
- Сообщения: 1961
- Зарегистрирован: 2008-09-08 21:59:56
Непрочитанное сообщение
Neus » 2014-10-06 23:35:14
В твоих примерах (1-3) цикл вообще ничего не обрабатывает, да и выполняется 1 раз.
В примере 4 цикл выполнится столько раз сколько строк в файле выводя при этом переменную line в stdout
запусти вот такое на файле > 2 строк
Код: Выделить всё
$ while read line; do tail -n1; done < test
Neus
-
Гость
- проходил мимо
Непрочитанное сообщение
Гость » 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
- капитан
- Сообщения: 1961
- Зарегистрирован: 2008-09-08 21:59:56
Непрочитанное сообщение
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?
Neus