Kir Kolyshkin (k001) wrote,
Kir Kolyshkin
k001

Category:

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

Зашёл тут разговор об использовании командной строки в качестве калькулятора. Я, например, привычно пользуюсь 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 файлов -- не очень практично. Да и не совсем это уже командная строка получается. Впрочем, я сделал пример на постскрипте, но показывать вам пока не буду.

Пишите в комментах ваши варианты использования командной строки в качестве калькулятора! Наверняка я многое пропустил!
Tags: fun, linux
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 54 comments
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →
Previous
← Ctrl ← Alt
Next
Ctrl → Alt →