Страница 1 из 1
Сложение в командной строке
Добавлено: 2010-05-17 8:13:15
sav
Если спрашивали, извините, не нашел.
в bash есть возможность сложения в командной строке:
а sh меня посылает и пишет
Подскажите пожалуйста, как провернуть такое сложение в sh?
Re: Сложение в командной строке
Добавлено: 2010-05-17 8:34:05
Reiser
Как минимум в
http://www.lissyara.su/doc/programming/shell/ было про арифметические операции. Прямо команду не помню.
Re: Сложение в командной строке
Добавлено: 2010-05-17 8:45:54
terminus
Re: Сложение в командной строке
Добавлено: 2010-05-17 8:56:04
sav
2 Reiser
Спасибо, нашел
примерно то что надо
Re: Сложение в командной строке
Добавлено: 2010-05-17 14:19:44
Гость
sav писал(а):а sh меня посылает и пишет
Подскажите пожалуйста, как провернуть такое сложение в sh?
оно работает и в ash (в freebsd он называется /bin/sh). Ты сначала его запусти. Наверное, по дефолту сидишь в tcsh, вот тя он и посылает.
Re: Сложение в командной строке
Добавлено: 2010-05-23 12:08:01
Reiser
Потому что надо
, а команды 21 он действительно не знает.
Re: Сложение в командной строке
Добавлено: 2010-05-23 18:12:31
Гость
expr это внешняя команда, let/exp - внутренние
Код: Выделить всё
> sh
$ type expr let exp
expr is /bin/expr
let is a shell builtin
exp is a shell builtin
$ echo $((1+1))
2
$ let 1+1
2
$ while [ $((i+=1)) -le 10 ]; do echo $i; done
1
2
3
4
5
6
7
8
9
10
на вызов внешних команд расходуется больше ресурсов
Код: Выделить всё
$ sh -c 'while [ ${i:=1} -le 9999 ]; do i=`expr $i + 1` ;echo $i; done >/dev/null; times'
0m0.151s 0m1.000s
0m2.683s 0m7.726s
$ sh -c 'while [ $((i+=1)) -le 9999 ]; do echo $i; done >/dev/null; times'
0m0.046s 0m0.015s
0m0.000s 0m0.000s
$ sh -c 'for i in $(jot - 1 9999); do echo $i; done >/dev/null; times'
0m0.014s 0m0.000s
0m0.004s 0m0.000s
разница заметна?
jot(1) тоже внешняя команд, но она может быть эффективнее в качестве простого счетчика с большим кол-вом елементов. Для маленкого кол-ва перевес лишниго форка будет легче заметен.