почти пятничное, бессмысленное и беспощадное

топ 100 блогов k001 — 10.03.2011 Зашёл тут разговор об использовании командной строки в качестве калькулятора. Я, например, привычно пользуюсь gcc:

$ gdb
GNU gdb (GDB) Fedora (7.2-46.fc14)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
.
(gdb) p 12*5
$1 = 60


Если арифметика целочисленная, то вполне подойдёт встроенная в шелл арифметика. Для обычного шелла это выглядит так:
$ let x=12*5; echo $x
60


А на баше можно скруглить углы:
$ echo $((12*5))
60


Можно, в общем-то, и на awk написать:
$ awk 'BEGIN {print 12*5}'
60


Конечно же, так же подойдёт любой скриптовый язык -- Perl, Python, похапэPHP, Ruby и так далее.

К примеру, вот вам Python:
$ python
Python 2.7 (r27:82500, Sep 16 2010, 18:02:00)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 12*5
60


Или проще:
$ echo 'print 12*5' | python -
60

А вот Perl, для данного случая -- никакой разницы, только Перл не добавляет перевод строки :)
$ echo 'print 12*5,"\n"' | perl -
60


А вот PHP, тоже надо добавлять перевод строки:
php -r 'print 12*5 ."\n";'
60


Пример на Ruby оставлю читателям в качестве домашнего задания.
$echo 'print 12*5,"\n"' | ruby
60


А вот особый шик -- на MySQL (полагаю, Postgres тоже вполне подойдёт). Только нужно, чтобы сервер был запущен. Клиент-серверный калькулятор, не хухры-мухры!

$ echo "SELECT 12*5;" | mysql
12*5
60


Ну и, конечно, никто не мешает нам взять и поступить как взрослые бородатые дядьки, а именно написать сразу на С, скомпилировать и запустить. Минимальный вариант примерно такой:
$ echo 'void main(void) {printf("%d\n", 12*5);}' > m.c
$ gcc m.c && ./a.out
m.c: In function ‘main’:
m.c:2:1: warning: incompatible implicit declaration of built-in function ‘printf’
60


Да, очень просится пример на постскрипте, и ведь в принципе несложно сделать, только для того, чтобы увидеть циферку, нужен принтер или просмотровщик PS файлов -- не очень практично. Да и не совсем это уже командная строка получается. Впрочем, я сделал пример на постскрипте, но показывать вам пока не буду.

Пишите в комментах ваши варианты использования командной строки в качестве калькулятора! Наверняка я многое пропустил!

Оставить комментарий

Архив записей в блогах:
Наткнулся на термин "гибридный писатель". Сломал половину головы, думая, что за кентавр. Гибридное писательство преподают на очередных курсах типа "первое бесполезное занятие бесплатно". Пошел смотреть. Оказалось, что гибридный писатель это - музыка, туш! - автор книжных кроссоверов. В ...
Рядом с ним стояла блондинка с тупым выражением лица и силиконами. Наш разговор уже слушала вся барная стойка. Не прошло и минуты, как мачо оттолкнул от меня мальчика и грубо начал со мной танцевать. Было слышно приглушенную музыку и звук ...
Доброе Утро! Сегодня 14 ноября. Память бессребреников и чудотворцев Космы и Дамиана Асийских и матери их преподобной Феодотии. Кузьминки осенние. В этот день родился Клод Моне. Сегодня празднует День Рождения Аркадий Либерман и Юрий Зыков. Мои поздравления! Погода в Тюмени сейчас минус 9. ...
...
Случилось мне участвовать в конкурсе сказок с текстом Теплая сказка и победить. И присылает мне организатор конкурса вопросы интервью. Ну, думаю, дожил, интервью у меня берут. Однажды у меня уже брали интервью. На радио. По бартеру. В 90-е все ...