Knoppix
Модераторы: Warderer , Модераторы разделов
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 05.02.2014 17:10
Тем не менее оно работает:
Впрочем, лучше действительно обойтись без экранирования. Есть куча других способов:
$ echo $I"_"$J
$ echo "$I"_"$J"
$ echo ${I}_${J}
$ echo ${I}_$J
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Bizdelnick
Модератор
Сообщения: 21344
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 05.02.2014 17:19
SLEDopit писал(а): ↑ 05.02.2014 17:10
Тем не менее оно работает
Работает, потому что ты кавычки убрал.
$
$ I=1;J=2;echo "$I\_$J"
1\_2
$
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 05.02.2014 18:22
В русском языке есть слово "Хайль"?
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 05.02.2014 18:31
Bizdelnick писал(а): ↑ 05.02.2014 17:19
Работает, потому что ты кавычки убрал.
В сообщении yars'а кавычек не было. Так что я их не убирал (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Bizdelnick
Модератор
Сообщения: 21344
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 05.02.2014 20:18
serzh-z писал(а): ↑ 05.02.2014 18:22
В русском языке есть слово "Хайль"?
Да. Сюрприз?
https://ru.wiktionary.org/wiki/%D1%85%D0%B0....BA.D0.B8.D0.B9
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 05.02.2014 20:23
reg123
Сообщения: 284
ОС: Vista
Сообщение
reg123 » 05.02.2014 22:13
Мда, пришлось-таки погружаться в этот мерзкий баш-синтаксис
конструкция
for i in seq 1 15
выдаёт сначала seq, потом 1, потом 15. Вот и вся секвенция.
Правильно будет так:
for i in $(seq 1 15)
Работа над чудо-менеджером продолжается...
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 06.02.2014 05:53
reg123 писал(а): ↑ 05.02.2014 16:27
В общем, провёл я тесты в боевых условиях и выяснил, что "$I_$J" почему то не работает.
это потому, что я давал советы и выкатил PoC. Можно было
${I}_${J}
reg123 писал(а): ↑ 05.02.2014 22:13
Правильно будет так: for i in $(seq 1 15)
заранее отмечу, что seq 1 100500 НЕ сработает, если памяти не хватит. Да и не нужно это.
Впрочем, память сейчас дешёвая...
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 06.02.2014 08:12
drBatty писал(а): ↑ 06.02.2014 05:53
заранее отмечу, что seq 1 100500 НЕ сработает, если памяти не хватит. Да и не нужно это.
Ну скажем так, seq то отработает на отлично, проблема в способе использования результатов его трудов. Если всё скармливать через пайп, то работать будет примерно так же, как и for конструкция на bash.
Код: Выделить всё
$ time for (( i=0; i<1005000 ; i++ )) ; do echo $i > /dev/null ; done
real 0m15.580s
user 0m13.076s
sys 0m2.436s
$ time while read i ; do echo $i > /dev/null ; done < <(seq 1 1005000)
real 0m15.650s
user 0m13.084s
sys 0m2.544s
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 06.02.2014 09:57
SLEDopit
$
time for (( i = 1; i < 12345678; i++ )); do :; done
работает. Медленно но верно, весело и страшно.
Код: Выделить всё
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13833 drb 20 0 5492 2456 1408 R 100 0.2 2:32.65 bash
конструкция с `seq 1 12345678` умерла. ЧЯДНТ?
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 06.02.2014 10:19
PS:
$
$ time for (( i = 1; i < 12345678; i++ )); do :; done
real 9m37.151s
user 9m15.148s
sys 0m19.379s
$ uname -a
Linux amilo 3.10.17-smp #2 SMP Wed Oct 23 17:13:14 CDT 2013 i686 Intel® Atom™ CPU N270 @ 1.60GHz GenuineIntel GNU/Linux
Bizdelnick
Модератор
Сообщения: 21344
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 06.02.2014 10:36
reg123 писал(а): ↑ 05.02.2014 22:13
Правильно будет так: for i in $(seq 1 15)
Да, ступил. Не тестировал.
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 06.02.2014 10:40
drBatty писал(а): ↑ 06.02.2014 09:57
ЧЯДНТ?
Используете `seq 1 12345678`. Нужно выхлоп seq в пайп отправлять. Ну или через < <(). Тогда его вывод не будет храниться в памяти, и оно не будет падать. А если через `` или $(), оно разумеется упадёт.
А так можно и {1..12345678} написать. Оно тоже упадёт. (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 06.02.2014 11:16
SLEDopit писал(а): ↑ 06.02.2014 10:40
Нужно выхлоп seq в пайп отправлять.
попробую time while read i; do :; done < <(seq 1 12345678)
SLEDopit писал(а): ↑ 06.02.2014 10:40
А если через `` или $(), оно разумеется упадёт.
ну и что в этом хорошего?
и да, вы вообще читаете,
на что я отвечаю ?
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 06.02.2014 11:26
drBatty писал(а): ↑ 06.02.2014 11:16
и да, вы вообще читаете, на что я отвечаю?
конечно. я просто заметил, что не стоит так категорично говорить про непригодность seq, когда его применяют заведомо проигрышным способом. не более того.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Сообщение
drBatty » 06.02.2014 11:31
ваш вариант дольше:
$
$ time while read i; do :; done < <(seq 1 12345678)
real 12m33.772s
user 9m51.207s
sys 2m39.755s
как вы думаете, куда делись три минуты real - user?
SLEDopit писал(а): ↑ 06.02.2014 11:26
не стоит так категорично говорить про непригодность seq, когда его применяют заведомо проигрышным способом. не более того.
seq тут
в принципе не нужна . Если вы с этим не согласны, потрудитесь обосновать.