Любой калькулятор командной строки для Ubuntu?

119

Я ищу калькулятор, который может выполнять вычисления в самом терминале без каких-либо дополнительных префиксов и суффиксов.

Например: если я набрал что-то вроде 10000-9000 в терминале, ответ должен появиться как 1000.

Еще раз говорю, мне просто нужен быстрый калькулятор в терминале, без добавления каких-либо символов. Я знаю, что если я переключусь на Python, он сможет это сделать, но я не хочу этого таким образом.

rɑːdʒɑ
источник
1
Может быть, packages.ubuntu.com/saucy/apcalc ?
пробуждение
2
Это может быть возможным , чтобы взломать что - то подобное с видом предварительного крюка; но это само по себе может быть сделано только действительно уродливым и хакерским способом . Нет, я очень думаю, что это не очень хорошая идея. Bash в целом подразумевается как простой язык сценариев ввода-вывода, все, что он делает, кроме того, является более или менее специальным и не очень хорошо работает. С другой стороны, Python (или даже, например, Haskell) - это современный универсальный язык программирования с отличным синтаксисом. Так что было бы просто глупо не использовать его.
оставлено около
3
В том же духе, вы также можете сделать что-то с command_not_foundкрючком и попытаться передать команду в bc/ calc/ что угодно, если она выглядит неопределенно как математика. Это все еще чувствует себя немного грязным, все же.
хронит
1
Подождите, что именно вы имеете в виду "переключиться на" Python? и "без каких-либо дополнительных префиксов"? Вы говорите, что хотите иметь возможность вычислять вещи в командной строке без выполнения команды ?
Random832

Ответы:

78

Баш Арифметика

Другое возможное решение - добавить простую функцию для встроенной арифметики Bash. Поместите это в свой .bashrcфайл, чтобы попробовать:

=() {
    echo "$(($@))"
}

Так что теперь вам даже не нужно $((...))больше, только то, =что кажется достаточно естественным.

замена

Другое дело , если вы хотите быть еще быстрее: вы можете сделать его заменить pс +и xс *. Это будет работать для этого:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    echo "$(($calc))"
}

= 5 x 5  # Returns 25
= 50p25  # Returns 75

Теперь вам даже не нужно Shiftбольше, только перед арифметикой.

Шестнадцатеричный вывод

Выходные данные могут отображаться в десятичном и шестнадцатеричном виде, если это необходимо. ( Примечание : использование xподстановки будет конфликтовать с 0x...шестнадцатеричным синтаксисом)

=() {
    local answer="$(($@))"
    printf '%d (%#x)\n' "$answer" "$answer"
}

Пример:

$ = 16 + 0x10
272 (0x110)

$ = 16**3 + 16**4
69632 (0x11000)

С помощью bc

Если вы хотите немного более сложных вычислений, вы можете сделать bcтак:

=() {
    local IFS=' '
    local calc="${*//p/+}"
    calc="${calc//x/*}"
    bc -l <<<"scale=10;$calc"
}

= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)'  # Returns pi (3.1415926532)

Функции, предоставляемые bcследующим образом (и могут быть найдены из man bc):

sqrt ( expression )
       The value of the sqrt function is the square root of the expression.  
       If the expression is negative, a run time error is generated.

s (x)  The sine of x, x is in radians.

c (x)  The cosine of x, x is in radians.

a (x)  The arctangent of x, arctangent returns radians.

l (x)  The natural logarithm of x.

e (x)  The exponential function of raising e to the value x.

j (n,x)
       The Bessel function of integer order n of x.

Он также поддерживает if, for, whileи переменные , такие как язык программирования , хотя , если это может быть лучше писать в файл , если вы хотите этого.

Имейте в виду, что он будет подставлять pи xв имена функций / переменных. Может быть, лучше просто удалить замены.

С помощью gcalccmd

Вы также можете сделать вызов функции gcalccmd(из gnome-calculator) так:

=() {
    local IFS=' '
    local calc="$*"
    # Uncomment the below for (p → +) and (x → *)
    #calc="${calc//p/+}"
    #calc="${calc//x/*}"
    printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}

= 'sqrt(2)' # Returns 1.4142135623
= '4^4'     # Returns 256

Кажется, что доступные функции (взяты прямо из исходного кода ) ==обозначают эквивалентные функции:

ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()
харакири
источник
1
Спасибо, можете ли вы добавить больше поддержки с научными расчетами?
2013 года
2
@rajagenupula Смотрите мои правки выше
Кири
Извините за поздний ответ, но команда, которую вы дали, gcalccmdработает не очень хорошо. Это показывает, Error 3вероятно, из-за того, что пустые пробелы Однако этот слегка модифицированный echo -e "$calc\nquit"| gcalccmd | sed "s:^> ::g"
вариант
Я построил научный калькулятор, используя R! function = { R -q --vanilla -e "$@" | grep -E '[^>](.*)' -o -x --color=never }
Мортеза Милани
Привет и спасибо. Это круто. Кстати, ваша замена на «x» делает его неудачным для шестнадцатеричного ввода, который в противном случае работает нормально. Говоря о том, могу ли я также получить ответ в шестнадцатеричном формате? например. = 2 + 0x20 34 (0x22)
FractalSpace
93

Вы можете выполнять простую целочисленную арифметику непосредственно в bash, используя ((...))синтаксис, например:

$ echo $((10000-9000))
1000

Существует также bcкалькулятор, который может принимать арифметические выражения на стандартный ввод

$ echo "10000-9000" | bc
1000

bcПрограмма может сделать арифметику с плавающей точкой , а также

$ echo "scale = 3; 0.1-0.09" | bc
.01
steeldriver
источник
11
Это, наверное, самое близкое, что вы можете получить. Чтобы сократить лишнюю типизацию (но не полностью ее исключить), вы можете поместить функцию в ваш ~ / .bashrc: calc()NL {NL echo "$@" | bcNL, }где NL - новая строка. Затем вы можете ввести calc 1234 + 768(печатать 2002) или любую другую формулу, которая bcможет интерпретировать. Конечно, вы можете использовать любое имя функции, я просто подумал, что это calcпрекрасно сочетается с тем, что он делает.
CVN
4
когда-то Python лучше, чем эхо все время. мое мнение.
rʒɑdʒɑ
6
Вы также можете использовать bc в интерактивном режиме, если вам не нужен эхо по какой-либо другой причине: просто запустите bc и введите выражение. Введите Ctrl-D на отдельной строке, чтобы выйти.
бесполезно
если бы вы делали автоматическое выражение, используя псевдоним или что-то еще, это было бы здорово.
rʒɑdʒɑ
3
Не нужно echo:bc <<< "2*2"
Бернхард
90

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

sudo apt-get install apcalc

После установки вы можете сделать любой расчет по вашему желанию:

$ calc 5+2
    7
$ calc 5-2
    3
$ calc 5*2          
    10
$ calc 5/2
    2.5
$ calc 5^2
    25
$ calc 'sqrt(2)' 
    1.4142135623730950488
$ calc 'sin(2)'
    0.9092974268256816954
$ calc 'cos(2)'
    -0.416146836547142387
$ calc 'log(2)'
    ~0.30102999566398119521
$ calc 'sqrt(sin(cos(log(2))))^2'
    ~0.81633199125847958126
$ # and so on...

Для получения дополнительной информации, смотрите его man-страницу

Раду Рэдяну
источник
2
Спасибо за ответ, вижу ответ имеет свое значение. Мне больше нравится все эти вычисления тригонометрических функций. любое руководство или страница о том, что он может сделать, может помочь вам ответить на многие вопросы. :)
rɑːdʒɑ
@rajagenupula man calcи calc helpговорит все.
Раду Рэдяну
2
Мое намерение, если кто-то смотрит на это, должно быть ясно и быстро. благодарю вас.
rʒɑdʒɑ
1
На самом деле вы используете, calc help builtinчтобы увидеть список поддерживаемых функций, таких какsin()
Penghe Geng
Дает больше десятичных знаков, поэтому он лучше подходит для моих целей, чем встроенная арифметика bash. Благодарю.
Mrmfldmn
30

К сожалению, нет более простого способа сделать это. Интерактивный интерфейс Python в командной строке лучше всего подходит для того, что вам нужно, потому что, в отличие от apcalc\, pythonон включен в Ubuntu. Я не уверен, bcвключен ли он до сих пор, однако, Python является практическим фаворитом для этого материала.

Вы можете просто запустить интерактивный pythonинтерфейс в командной строке, а затем выполнить математику таким образом. Вы можете использовать это как свой калькулятор.

Для этого вы открываете терминал, набираете python, затем Enterнажимаете кнопку.

Затем, в питоне строке , которая показывает, вы можете ввести математику. Например, 10000 - 9000. Вывод следующей строки - результат.


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

10000 - 9000 долларов
1000
$

... тогда нет, нет способа сделать это только в терминале без чего-либо еще, потому что Bash не обрабатывает числовые аргументы, подобные этому.

Томас Уорд
источник
1
Я упоминал, что не хочу переключаться на python
rɑːdʒɑ
1
Обновленный @rajagenupula, также включал материал, который я упомянул в чате.
Томас Уорд
БК больше не входит?
Random832
1
Кроме того, ipythonэто немного более полезно, чем стандартная оболочка Python, когда дело доходит до выполнения вычислений и тому подобного.
Нафтули Кей
bc включен по умолчанию (по крайней мере, в 16.04)
TJ Ellis
23

Я бы посоветовал вам создать простую функцию для базовых вычислений Python. Как то так в вашем .bashrc:

calc() {
    python3 -c 'import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 5 + 5
# Returns 10

result="$(calc 5+5)"
# Stores the result into a variable

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

calc() {
    python3 -c 'from math import *; import sys; print(eval(" ".join(sys.argv[1:])))' "$@"
}

calc 'sqrt(2)'  # Needs quotes because (...) is special in Bash
# Returns 1.4142135623730951

result="$(calc 'sqrt(2)')"
# Stores the result into a variable

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

В качестве альтернативы вы можете создать скрипт Python calc,

#!/usr/bin/python3
from math import *
import sys
print(eval(' '.join(sys.argv[1:])))

поместите его в каталог, включенный в PATHпеременную, и установите его исполняемый флаг, чтобы получить ту же calcкоманду, что и выше (не нужно создавать функцию Bash для запуска скрипта Python).

Если вы хотите метод в чистом Bash, используйте ответ Steeldriver. Этот ответ действительно полезен, только если вам нужны более продвинутые функции (например, из math), так как Python относительно медленный по сравнению с Bash.


Я не уверен, что это сломает ваш «переход на python, он может это сделать, и я не хочу этого таким образом». обратите внимание, но вам не нужно вводить интерактивное приглашение, и результат доступен в Bash, поэтому этот ответ кажется верным (по крайней мере, мне).

харакири
источник
каждый раз, когда это нужно, значит не так уж легко и гибко. Спасибо. Какие улучшения вы можете сделать, чтобы это выглядело более простым и понятным? Мне бы понравилось это.
rʒɑdʒɑ
1
@rajagenupula Вы можете положить , что в функции в вашем .bashrc (возможно , с более коротким именем: c, ?или +?) , так что вы будете иметь его каждый терминал при открытии.
Кири
1
Осторожно: с Python 3 это прекрасно работает, но если вы хотите использовать Python 2, вам нужно отредактировать фрагмент кода: python2 -c "from __future__ import division; from math import *; print($*)"иначе он всегда будет выполнять целочисленное деление, например calc 5/2, 2вместо вас получится 2.5. Смотрите здесь для справки: stackoverflow.com/a/183870/202504
jmiserez
Решение Python на самом деле может быть лучше, чем apcalc, так как вы можете импортировать дополнительные библиотеки, и оно поддерживает литерал piи e. Я чувствую, что это отдельный скрипт, более гибкий и переносимый. Вот простой смысл
Пенге Гэн
21

Используйте пакет gcalccmdfrom gnome-calculator(> = 13.04) или gcalctool(<13.04). Я думаю, что пакет установлен по умолчанию

% gcalccmd
> 2+3
5
> 3/2
1.5
> 3*2
6
> 2-3
−1
> 
кремень
источник
Лучший до сих пор .. Не нужно делать лишних вещей, а также установлен по умолчанию .. man gcalccmdговорит: консольный калькулятор . Просто это именно то, чего хочет ОП .. :)
Саурав Кумар
Это круто, похоже на калькуляторы bc, python, ocatve. Спасибо.
rʒɑdʒɑ
Так как gcalccmd довольно сложно набрать, хорошей идеей будет добавить псевдоним к нему ./bash_aliasesкак alias calc='gcalccmd'или, если вы хотите сделать одноразовые вычисления (с мгновенным ответом), вы можете добавить alias calc='gnome-calculator -s'- использование последнего: calc 2000/1300или calc 2+3. В этом случае нет необходимости выходить из калькулятора - он просто дает вам ответ, и вам не нужно вводить quit.
Рафал
10

Вот быстрый скрипт для этого:

#!/bin/bash
echo "$@" | bc

Сохраните его как «c», затем поместите его где-нибудь на вашем пути (например, / bin), затем отметьте его как исполняемый.

# nano /bin/c
# chmod +x /bin/c

Теперь вы можете выполнять вычисления в терминале следующим образом:

$ c 10000-9000
1000
user530873
источник
Вы превосходны, добавив только одну букву, прежде чем вычисление означает, что это действительно крутая идея. это супер, если мне нужно от 2 до 3 расчетов. Я могу пойти на Python или другое дольше, но короче, я выбираю это. Спасибо, что заглянули.
rʒɑdʒɑ
2
Я бы посоветовал вам использовать echo "$@" | bcвместо этого, чтобы вы могли поставить пробелы в расчетах более естественно
Кири
Как насчет использования =вместо cимени этой команды? Bash фактически позволяет вам использовать это как имя функции.
Каз
1
Вы можете поместить программы в ~/bin(ваш домашний каталог bin) и убедиться, что они /home/yourname/binесть в вашем PATH.
Каз
@ minerz029 Хорошее мышление. Я отредактировал свой ответ соответственно.
user530873
8

Вот модификация соответствующей части /etc/bash.bashrc(в Ubuntu 10.04), которая изменит command_not_foundобработчик для запуска средства оценки выражений оболочки, если первый символ неизвестной команды является числом или -или +.

Вы сможете выполнить любую арифметику оболочки таким образом; см. http://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic для получения списка арифметических операторов.

Обратите внимание, что если выражение, которое вы хотите вычислить, содержит a *, вам придется заключать в кавычки *с \или или кавычки, так как оболочка выполнит расширение имени файла, прежде чем решить, какую команду запустить. То же самое для других операторов, как >>.

Вставьте это в свой ~/.bashrc, затем напечатайте . ~/.bashrcи попробуйте.

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; then
    function command_not_found_handle {
        if [[ $1 == [0-9+-]* ]]; then
           echo $(( $@ ))
        elif [ -x /usr/lib/command-not-found ]; then
           /usr/bin/python /usr/lib/command-not-found -- $1
           return $?
        elif [ -x /usr/share/command-not-found ]; then
           /usr/bin/python /usr/share/command-not-found -- $1
           return $?
        else
           return 127
        fi
    }
fi

Пример вывода: (Я набираю ctaопечатку, просто чтобы проверить, что наш новый обработчик command_not_found все еще будет пытаться искать неизвестные команды).

mp@ubuntu:~$ cta
No command 'cta' found, did you mean:
 Command 'cda' from package 'xmcd' (universe)
 Command 'cat' from package 'coreutils' (main)
cta: command not found
mp@ubuntu:~$ 9000-1000
8000
Марк Плотник
источник
Есть ли способ добавить больше поддержки для расчетов?
rʒɑdʒɑ
1
Вы можете взять строку с надписью echo $(( $@ ))и изменить ее, вместо этого запустить одну из более продвинутых калькуляторных программ, упомянутых другими ответчиками, которые берут свои аргументы в командной строке.
Марк Плотник
8

Другое решение, о котором я не упомянул, это Qalculate (qalc) .

sudo apt-get install qalc

для версии CLI,

sudo apt-get install qalculate-gtk

для графического интерфейса.

Он имеет множество функций, таких как:

  • поддержка юнитов : например20 m / s * 12 h = 864 kilom
  • встроенные константы , такие как pi, e, c,avogadro
  • многие встроенные функции : например sin(pi) = 0, gamma(4) = 6, 5! = 120,log(1024, 2) = 10
  • перевод единиц, например:

> 120 in
120 * inch = 120 in
> convert cm
120 in = 304.8 centim

  • символьный расчет , например(x + y)^2 = x^2 + 2xy + y^2
  • интеграция, например integrate 3*x^2 = x^3,diff sin(x), pi
  • встроенная помощь, например help convert,help integrate
  • завершение команд на вкладке
  • все переведено, например, моя система написана на голландском языке, поэтому я могу написать factorial(5)и faculteit(5).
  • и более...

Вы говорите, что хотите использовать его без префиксов, ну ... вы можете использовать его с префиксом:

$ qalc 5 ft + 3 cm
(5 * foot) + (3 * centim) = 1.554 m

а также запустить его как репл.

JW.
источник
7

dc! Он является частью coreutils, поэтому он установлен на OS X, Ubuntu и почти все остальное. Это калькулятор RPN, так что если он вам не нравится, он не для вас.

Очень простые команды: (man-страница имеет весь синтаксис, который я не включил. Расшифровка, кто-нибудь?)

Вам нужны только пробелы между числами. Они игнорируются во всех других случаях.

Ввод числа подталкивает его к вершине стека.

+ Adds top 2 items in stack, then pushes result to stack (`2 4 +p` outputs 6)
- Subtracts top 2 items in stack, then pushes result to stack (`4 2 -p` outputs 2)
* Multiplies top 2 items in stack, then pushes result to stack (`6 5 *p` outputs 30)
/ Divides top 2 items in stack, then pushes result to stack (`54 7 /p` outputs 8)
p Print top item in stack, without destroying it
c Clear stack
r Swap top 2 items on stack
d Duplicate top item on stack
k Pops top item off stack, using it to determine precision (so 10 k would print 10 numbers after the decimal point). Default is 0, so it won't do floating point math by default.
n Pops top value off stack, then sends to stdout without a trailing newline
f Dump stack. Useful for finding what something does
Еще один пользователь
источник
Просто заметил, что это не отвечает на вопрос (и не делает никаких других ответов). Вопрос в том, как НЕ иметь какой-либо материал перед уравнением (или позади), и просто набрать, скажем, 42 * 5в терминал, и заставить его выводить ответ
И еще один пользователь
2
Большинство ответов не применяются. Печатание 1+1в терминале почти никогда не будет работать. Таким образом, ваш ответ в порядке
Кири
@ YetAnotherUser Я думаю, что единственный способ - взломать команду not-found (если она установлена) или сделать что-то грязное в bashrc ...
Braiam
5

Я использую Octave для такого рода вещей: http://www.gnu.org/software/octave/

Это в значительной степени клон matlab (извините, если это слишком упрощенно), который можно использовать в терминале, набрав октаву. Установить sudo apt-get установить октаву

Это не совсем то, что вы хотите, но я решил добавить его в качестве альтернативы Python.

Пример использования:

~ $ octave
octave:1> 9000 - 8000
ans =  1000
octave:2> 
Энди Т
источник
В ответе хорошо предложить другой способ достижения цели, но вы должны предоставить больше информации о том, как OP будет использовать Octave для удовлетворения заявленных потребностей и почему это хорошая альтернатива.
Часов
2
+1, Octave, Matlab, Scilab, Python все похожи, но октаву мне нужно установить, но Python предустановлен. поэтому я направляюсь в python по умолчанию. Спасибо.
rʒɑdʒɑ
из всего, что я пробовал (и я пробовал много!) октава - единственная, которая возвращает ненулевое значение при синтаксической ошибке! Спасибо!
Водолей Пауэр
5

Мне очень нравится Wcalc. Это научный калькулятор командной строки. Легко найти в Ubuntu Software Center или просто использовать apt-get.

sudo apt-get install wcalc

Он принимает аргументы командной строки, а также имеет режим «shell»:

# simple operation
$ wcalc 2+2
 = 4
# Quoting is necessary to prevent shell from evaluating parenthesis
$ wcalc "(2+2)*10"                                                                                    
 = 40
$ wcalc "sqrt(25)"                                                                                    
~= 5
# in shell mode you can evaluate multiple commands repeatedly
$ wcalc
Enter an expression to evaluate, q to quit, or ? for help:
-> 12*20+1
 = 241
-> sin(90)
 = 1
-> sin(pi/2)
 = 0.0274121

И если кто-то, как и я, занимается разработкой, вы можете использовать GNU Octave. Он может делать все что угодно, строить графики, решать уравнения одновременно. Плюс это бесплатная альтернатива Matlab

Сергей Колодяжный
источник
... комбинировать это с @ minerz029 довольно аккуратно: поместите это в свои ~ / .bash_aliases:=() { wcalc "$@" }
Фрэнк
4

Простой способ - вызвать Python.

Пример:

>  python -c 'print 10000-9000'
user2327875
источник
Можете ли вы упомянуть что-то с научными расчетами.
rɑːd at
1
Вы хотите что-то подобное? python -c 'import math;print math.log(2)'
user1251007
3

Я обнаружил, что я не могу доверять expr, bc или встроенным параметрам Shell. Поэтому я использовал Perl, который обычно устанавливается в дистрибутиве * linux

perl -le 'printf "%.0f", eval"@ARGV"' "($VAL2-$VAL1)"

Приведенный выше расчет вычитает $ VAL1 из $ VAL2 и печатает без десятичных разрядов (0f)

Преимущество использования Perl (подробности о плюсах и минусах приведены здесь )

  • Лучшее отслеживание ошибок (деление на 0 не остановит вычисления)
  • Может предоставить формулы в конфигурационном файле. Не нужно убегать, используя сложное регулярное выражение
diaryfolio
источник
но каждый раз эта команда в любом случае означает небольшую проблему. Есть ли в терминале калькуляторы на основе Perl?
rʒɑdʒɑ
3

Вы можете добавить следующую функцию в ваш файл .bashrc:

function = {
  echo "$@" | bc -l
}

Обратите внимание, что -lфлаг очень важен. Без этого использование bcдает 5 / 2 = 2.

Как отмечалось выше, вычисления могут быть выполнены с использованием =знака перед формулой.

VDM
источник
3

Вы также можете использовать awk для выполнения некоторых арифметических вычислений на терминале,

echo 10000 9000 | awk '{print $1-$2}'
1000
echo 10000 9000 | awk '{print $1+$2}'
19000
echo 10000 9000 | awk '{print $1/$2}'
1.11111
echo 10000 9000 | awk '{print $1*$2}'
90000000
Авинаш Радж
источник
круто, awk (как октава) также возвращает ненулевое значение при синтаксической ошибке thx!
Водолей Пауэр
2

используйте команду "BC", а затем вы можете сделать расчет

пример

[root@vaibhav ~]# bc

----------these lines will genrate automaicaly---------------

right 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

---------------enter your calculation here---------------------------------------


10+2   

12

Для использования bcбез гарантии пишите в терминалbc -q

пример

[root@vaibhav ~]# bc -q
10+2
12
Вайбхав Джайн
источник
до н.э. уже объяснено и включено.
Брайам
2

Вы можете использовать bind и bash C-aи C-eдля управления выводом. Например, выполните это в вашей оболочке:

bind '"\C-j": "\C-aecho $(( \C-e )) \C-m"'

Теперь введите любую арифметическую операцию, например 10 + 15, и нажмите Ctrl+ J:

$ echo $(( 10 + 15 )) 
25

Вы получите это. Теперь, как это сделать?

  • bind эта команда изменяет привязку вашего bash, как сочетания клавиш.
  • \C-j это bash-эквивалент Ctrl + J, вот какую комбинацию клавиш мы хотели бы добавить в нашу команду.
  • \C-a это приводит нас к началу линии.
  • echo $((это пишет echo $((в начале.
  • \C-e подводит нас к концу линии
  • )) закрывает нашу предыдущую скобку
  • \C-m это эквивалент возврата ключа.

Вы можете написать это в свой ~/.inputrcфайл:

"\C-j": "\C-aecho $(( \C-e )) \C-m"

Конечно, другие ответы тоже действительны! Просто немного подправил:

  • до н.э: "\C-j": "\C-aecho " \C-e " | bc \C-m"
  • apcalc: "\C-j": "\C-acacl \C-m"
  • питон: "\C-j": "\C-apython3 -c "print( \C-e )" \C-m"
  • любые другие?

Вы можете изменить Ctrl + J на ​​все что угодно, но помните, старайтесь не менять его на то, что уже имеет привязку;).

Ресурс:

Braiam
источник
Ctrl + J уже имеет привязку, он отправляет строку (например, Enter). На самом деле это довольно умный ответ;)
kiri
2

В прошлом я использовал wcalcнебольшую программу под названием e, за которую практически невозможно было найти Google. Теперь я использую скрипт Python для этого, который использует некоторые функции, eтакие как квадратные скобки. wcalcвсе еще хорош, потому что он может выполнять произвольную точность и преобразование единиц, но я почти никогда не использую эти функции.

#!/usr/bin/env python3

"""
This is a very simple command line calculator.  It reads in all
arguments as a single string and runs eval() on them.  The math module
is imported so you have access to all of that.  If run with no
arguments, it allows you to input a single line expression.  In the
case of command line args, square brackets are replaced with round
parentheses, because many shells interpret round parentheses if they
are not quoted.
"""

import sys, numbers
import cmath, math

args = sys.argv[1:]

if len(args) < 1:
    expr = input()
else:
    expr = " ".join(args[:])
    expr = expr.replace("[", "(").replace("]", ")")

def log2(x):
    """Return the base-2 logarithm of x."""
    return cmath.log(x, 2)

# the smallest number such that 1+eps != 1
# (this is approximate)
epsilon = sys.float_info.epsilon

env = math.__dict__
env.update(cmath.__dict__)
env = {k:v for k,v in env.items() if not k.startswith("__")}
env["eps"] = epsilon
env["log2"] = log2
env["inf"] = float("inf")
env["nan"] = float("nan")

res = eval(expr, env)
# throw away small imaginary parts, they're probably just due to imprecision
if (isinstance(res, numbers.Number)
    and res != 0
    and abs(res.imag)/abs(res) < 10*epsilon):
    res = res.real

print(str(res).replace("(", "[").replace(")", "]"))

Вот как это использовать (при условии, что скрипт был сохранен как eи помещен где-то в $PATH):

$ e e**[pi*1i]
-1.0
$ e hex[10**3]
0x3e8
$ e "[0o400+3]&0xff" # need quotes because of '&'
3
jpkotta
источник
пример сделает это выглядит более понятным. Спасибо.
rʒɑdʒɑ
0

Существует один шаг, чтобы выполнить именно то, что вы хотите. Все, что вам нужно сделать, это установить shellдля вашей учетной записи /bin/bc.

bizzyunderscore
источник
3
Не могли бы вы уточнить? Pressume OP не знает, как изменить оболочку.
Брайам
0

Вы также можете использовать printf встроенную оболочку для выполнения арифметических вычислений на терминале.

printf `expr $num1 + $num2`   # num1,num2 are  variables which stores numbers as values.

Пример:

$ printf "$(expr 10000 + 9000)\n"
19000
$ printf "$(expr 10000 - 9000)\n"
1000
Авинаш Радж
источник
3
Таким образом, вы используете expr (который не встроен) для вычисления результата, printf здесь избыточен
Хавьер Лопес
0

Вы можете использовать интерпретатор Python для расчета. Вот учебник о том, как это сделать .

Python 2 и python 3 установлены в Ubuntu по умолчанию.

$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+2
4
>>> 3*5
15
никто
источник
0

Создать калькулятор терминала

Поместите следующее в ваш файл .bashrc

function calc
{
 echo "${1}"|bc -l;
}

Или запустите его в командной строке. Теперь «calc» из оболочки будет работать следующим образом:

$ calc 3+45
   48

Все функции с "(" или ")" должны быть заключены в кавычки.

Вишну Н.К.
источник