Простой калькулятор командной строки

Вы можете поместить любую строку в переменную. Но вы не можете помещать пробелы вокруг знака равенства в присвоении:

adapter=/Volumes/My\ Passport/Documents/adapters.fa

или

adapter='/Volumes/My Passport/Documents/adapters.fa'

После этого определения вы можете использовать «$ adapter» в оболочке для ссылки на этот файл. Обратите внимание на двойные кавычки - без них оболочка разделила бы значение на пробел .

open "$adapter"

Это определение адаптера полезно только в оболочке. Например, вы не можете ввести $ adapter в диалоговом окне открытия файла и заставить его отображать это значение. Если вы хотите определить ярлык для файла, который можно использовать везде, вы можете создать символическую ссылку в легкодоступном месте.

19
08.11.2018, 12:43
18 ответов

Вы можете уменьшить объем детализации при использованииbc:

$ bc <<<"236-192"
44
$ bc <<<"1+1"
2

(при условии, что ваша оболочка поддерживает это ).

Если вы предпочитаете использовать это как функцию:

$ c() { printf "%s\n" "$@" | bc -l; }
$ c 1+1 22/7
2
3.14285714285714285714

(-lвключает стандартную математическую библиотеку и увеличивает масштаб по умолчанию до 20.)

Сохраните определение cв вашем любимом файле запуска оболочки, если вы хотите сделать его всегда доступным.

63
27.01.2020, 19:44

Прежде чем были опубликованы какие-либо другие блестящие ответы, я создал сценарий /usr/local/bin/c, содержащий:

#!/bin/sh
IFS=' '               # to be on the safe side, some shells fail to reset IFS.
if [ "$#" -eq 0 ];  then
    echo "$(basename "$0"): a (very) simple calculator."
    echo "type $(basename "$0") expression to evaluate (uses bc internally)"
fi

printf '%s\n' "$*" | bc -l  # safe for most shells
                            # we may use 'bc -l <<<"$*"` for ksh, bash, zsh

поэтому :ввод c 1+1дает 2!:-)

Примечание 1:Я использовал c, потому что этой команды нет ни в одной системе Unix, которую я смог найти. Если бы вы использовали псевдоним для своего компилятора c, используйте что-нибудь короткое и то, что вы не используете.
Примечание 2:Источник

4
27.01.2020, 19:44

Читая комментарии к этой странице , я вижу программу UNIX/Linux под названием calc, которая делает именно то, что вам нужно. Если на Debian/Ubuntu/производных:

sudo apt-get install apcalc

или в Fedora Linux:

sudo dnf install calc

тогда можно:

calc 236-192

и если вы добавите псевдоним alias c='calc'к вашему .bashrcили /etc/bash.bashrc, то он просто станет:

c 1+1

в командной строке.

27
27.01.2020, 19:44

Вzsh:

$ autoload zcalc # best in  ~/.zshrc
$ zcalc
1> 1+1
2
2> ^D
$ zcalc 5+5
1> 10
2>
17
27.01.2020, 19:44

Что я делаю в zsh:

$ <<< $(( 236 - 192 ))
44

В bash мне пришлось бы явно указывать кота:

$ cat <<< $(( 236 - 192 ))
44

Если бы я хотел, чтобы результат включал цифры дробной части (работает в zsh, а не в bash ), я бы добавил точку счисления к одному из операндов

$ <<< $(( 236 / 128 )) 
1
$ <<< $(( 236. / 128 ))
1.84375
7
27.01.2020, 19:44

Программа units, хотя и не предназначена для использования в качестве калькулятора, на самом деле работает достаточно хорошо.

$ units "236-192"
    Definition: 44
$ 

Если в выражении есть пробелы, то выражение должно быть заключено в кавычки -.
Он поддерживает экспоненты и глубокую вложенность скобок

.
10
27.01.2020, 19:44

Лично мне нравится libqalculate(командная -линейная версия Qalculate).

$ qalc
> 236-192

  236 - 192 = 44

Хотя интерфейс, безусловно, прост, (lib )qalculate является мощным, полноценным -полноценным калькулятором. например.

> fibonacci(133) to hex

  fibonacci(133) = approx. 0x90540BE2616C26F81F876B9

> 100!

  factorial(100) = approx. 9.3326215E157

> sin(pi)

  sin(pi * radian) = 0

Он также делает полезные вещи, такие как завершение табуляции, открытие/закрытие круглых скобок, когда это необходимо, и печатает свою интерпретацию запроса.

> 18-2)/4

  (18 - 2) / 4 = 4

Чтобы выйти, я просто нажимаю Ctrl + d .

Для еще более быстрого доступа установите что-то вроде alias ca='qalc'.

11
27.01.2020, 19:44

Если у вас установлен gradle, то у вас есть groovy...

Если путь к groovy указан правильно, вы сможете использовать:

groovy -e "println 1+1"

Это может показаться несколько избыточным по сравнению со всеми другими примерами, но:

  • groovy — мощный язык
  • возможно, лучшая из доступных библиотек
  • мощные и простые математические функции (Подобно математике произвольной точности)
  • использует перенаправляемый стандартный вывод для вывода, поэтому он удивительно гибкий (отлично подходит для использования внутри пакетных файлов с обратными кавычками ``и т.п. ).

Если у вас не установлена ​​java, вероятно, не стоит устанавливать groovy и java --это просто вариант, если groovy уже доступен.

2
27.01.2020, 19:44

Как отмечалось в комментарии к более раннему ответу, стандартная оболочка (ba )sh позволяет вычислять арифметические выражения внутри $((...)). Я не смог дважды -проверить, является ли это частью стандарта POSIX, но я проверил, работает ли он также на Cygwin и оболочке Mingw32.

Чтобы увидеть результат, вам действительно нужно набрать echo $((...)), что делает некоторые символы более интерактивными, чем ()bc. Однако для использования результата в сценарии это, скорее всего, будет короче, чем bcрешение (, которое может быть, например,`echo...|bc`).

Что касается детализации, команда bcдопускает параметр -q, который подавляет вывод «обычного приветствия GNU bc» .

В качестве последнего, слегка пограничного замечания, отметим, что bc— это не просто калькулятор, а полноценный -полноценный язык программирования (, включающий определяемые пользователем функции, циклы while & for и т. д. и т. д. ). Еще один факт, который наталкивает на мысль предпочесть сборку -с арифметическими возможностями для таких простых вычислений, а не внешней программой. Тем не менее, извлечение данных для заданного номера раздела (s )и работа с суффиксами «M», «G», как казалось в исходном вопросе, может потребовать (g)awkа не bc.

Источники:https://www.gnu.org/software/bc/manual/html_mono/bc.htmlhttps://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html

7
27.01.2020, 19:44

dc -e '236 192-p'

...конечно,если вы не знакомы сdcи вам требуется нечто большее, чем вычитание двух чисел, вы потратите больше времени на изучение того, как использоватьdc(и, возможно, RPN в целом ), чем вы' Сохраню более привычными способами.

2
27.01.2020, 19:44

Резюме

Перечислено несколько решений (shell, awk, dc, perl, python и т. д. ).

Функция может быть определена с любой опцией (gawk кажется наиболее гибким в использовании)

c () { local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
       gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
     }

И использовать как:

$ c 236- 192
44

Оболочка

Самый простейший расчет в CLI — это оболочка CLI ()сама (Если IFSпо умолчанию):

$ echo $(( 22 + 333 ))
355

Пробелы можно опускать:

$ echo $((22*333))
7326

Так как это часть POSIX , она есть почти во всех оболочках. И он включает большинство математических функций языка C (, за исключением того, что zsh имеет другой приоритет,установите C _PRECEDENCES, чтобы восстановить его до совместимого значения):

$ echo $((22*333^2))
7324

И некоторые оболочки имеют большую часть математического синтаксиса языка C (, включая запятую):

$ echo $((a=22,b=333,c=a*b,c))
7326

Но это только целочисленная математика (и обычно меньше 2 63 в современных ОС )в некоторых оболочках:

$ echo $((1234/3))
411

$ zsh -c 'echo $((2**63))'
-9223372036854775808

Некоторые оболочки могут выполнять математические операции с плавающей запятой:

$ ksh -c 'echo $((1234/3.0))'
411.333333333333333

$ ksh -c 'echo $((12345678901234567890123/3.0))'
4.11522630041152263e+21

Избегайте zsh (zcalc имеет аналогичные проблемы):

$ zsh -c 'echo $((12345678901234567890123 + 1))'
zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1
-1363962815083169259

Я рекомендую вам избегать expr, иногда нужны странные побеги:

$ expr 22 \* 333
7326

до н.э.

На следующем уровне находится(также POSIX)bc(двоюродный брат RPNdc)

$ echo '22*333' | bc
7326

$ echo '22 333 * p' | dc
7326

dcисторически()использовался для реализации bc и был исключен из POSIX в 2017 году .

Короче, если ваша оболочка поддерживает это:

$ bc <<<'22*333'
7326

Или даже:

$ <<<'22*333' bc
7326

Оба являются калькуляторами произвольной точности с некоторыми внутренними математическими функциями:

$ bc <<<2^200
1606938044258990275541962092341162602522202993782792835301376

$ echo 's(3.1415/2)' | bc -l        # sine function
.99999999892691403749

авк

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

$ awk "BEGIN {print (22*33)/7}"
103.714

$ perl -E "say 22*33/7"
103.714285714286

$ python3 -c "print(22*33/7)"
103.71428571428571

$ php -r 'echo 22*33/7,"\n";'
103.71428571429

функция

Вы можете определить функцию любой из вышеперечисленных опций:

c () 
{ 
    local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
    gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}

И использовать:

$ c 22* 33 /7                   # spaces or not, it doesn't matter.
103.714285714285714285714285714285714285714285714285714285714
38
27.01.2020, 19:44

Пробовали ли вы конкальк ?

Description: console calculator concalc is a calculator for the Linux console. It is just the parser-algorithm of extcalc packed into a simple console program. You can use it if you need a calculator in your shell. concalc is also able to run scripts written in a C-like programming language.

$ concalc 1+1
2
$ concalc sqrt2
1.41421356237309505

Установить с помощью:

sudo apt-get install concalc
4
27.01.2020, 19:44

Создание одного -вкладыша:

$ c () { echo $(( ${1} )) }

Теперь вы можете использовать простую целочисленную математику:

$ c 1+1
2

$ c 25*4
100

$ c 25*4-10
90

$ c 20*5/4
25
0
27.01.2020, 19:44

Python открыт в другой вкладке?

Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on 
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 3+3
6
>>>
6
27.01.2020, 19:44

Просто потому, что Python несколько раз упоминался в других ответах, вот обобщенный ответ, резюмирующий основную идею:

Вы можете использовать многие интерпретируемые языки с repl в качестве калькулятора. Это сэкономит вам время на изучение «специальной» программы, такой как bc.

Например, если вы уже знаете lisp, вы можете использовать его в качестве быстрого и грязный калькулятор командной строки:

sbcl --eval '(progn (print (+ 1 2 3 4)) (quit))'

Или, например, Окамл:

echo "let d = 553 - 226 in print_int d" | ocaml -noprompt -stdin

Любой язык, который вы считаете наиболее удобным.

2
20.06.2020, 01:06

Здесь есть много отличных ответов, на самом деле я написал небольшой язык программирования с учетом этой проблемы, где при вводе в командной строке ./Ascal 2+2или ./Ascal "log(10)"вы сразу получите результат Окончательный ответ :4 для 2+2, и я уверен, что вы можете представить логарифмическую базу 10 из 10. Просто имейте в виду, что это также полноценный язык программирования с кучей встроенных полезных функций, построением графиков в консоли и вычислением сумм Реймана для определенных вами функций. Проверьте это, проект теперь поставляется со скриптом сборки, поэтому все, что вам нужно сделать, это добавить его в переменную пути или добавить псевдоним в конфигурацию bash, и у вас есть простой в использовании калькулятор!
https://github.com/andrewrubinstein/AscalLang
Я также был бы очень признателен за любые комментарии, которые могут быть у тех, кто достаточно заинтересован, чтобы проверить это, надеюсь, что это может быть полезно.

1
14.09.2020, 04:14

2020 ответ

Добавить

# Calc
c(){ 
  echo "scale=2; $*" | bc -l
}

в свой ~/.aliases, затем

$ c 1/3
.33

(Первоначальная проблема уже решалась несколько раз. Однако заголовок «Простая команда -линейный калькулятор» может потребовать деления до нескольких знаков после запятой. Использование опции -lс bc, по-видимому, дает 20 знаков после запятой, что, возможно, слишком много для «простого» калькулятора. Этот ответ, на который Франкенштейн отвечает от @stephenKitt и @sjas, был самым простым решением, которое я нашел.)

1
09.01.2021, 13:28
$ echo $((1+5))
6

Это арифметическое расширение Баша

1
23.01.2021, 16:19

Теги

Похожие вопросы