Я использую последовательный терминал для ввода данных в наш лабораторный эксперимент. Я обнаружил, что используя
$ echo "5X5"
просто возвращает строку "5X5"
. Есть ли команда для выполнения операции умножения?
Я использую последовательный терминал для ввода данных в наш лабораторный эксперимент. Я обнаружил, что используя
$ echo "5X5"
просто возвращает строку "5X5"
. Есть ли команда для выполнения операции умножения?
Ответы:
Да, вы можете использовать встроенное арифметическое расширение bash$(( ))
для выполнения простых математических операций.
$ echo "$((5 * 5))"
25
Проверьте раздел Shell Арифметического в Bash Reference Manual для полного списка операторов.
Для полноты, как указывали другие, если вам нужна произвольная точность, bc
или dc
было бы лучше.
Bash поддерживает арифметическое расширение с помощью $(( expression ))
. Например:
$ echo $(( 5 * 5 ))
25
Ряд утилит предоставляют арифметические операции, включая bc и expr .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Классическое решение:
expr 5 \* 5
Еще один приятный вариант:
echo 5 5\*p | dc
Оба эти решения будут работать только с целочисленными операндами.
k
. Я точно помню точность по умолчанию, равную 0 (усечение до целого числа). Я плохо помню, или просто новые реализации изменили поведение?
dc
редко, так как я больше разбираюсь в алгебре и меньше RPN, поэтому я не помню. В системе GNU, которую я использую, значение по умолчанию - 0. Старая (1993 г.) FreeBSDman
странице упоминается, что значение по умолчанию равно нулю, а на старых man
страницах BSD нет.
echo '4 k 50.5 7 / p' | dc
работает (вывод:) 7.2142
.
Я использую эту функцию, которая использует bc
и поддерживает вычисления с плавающей запятой:
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
Пример:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Арифметическое расширение Bash не поддерживает числа с плавающей запятой (но оболочка Korn и zsh поддерживают).
Пример:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
У меня есть простой скрипт, который я использую для этого:
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
Он изменяется x
на, *
поскольку *
это специальный символ в оболочке. Используйте его следующим образом:
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(вам все равно придется использовать кавычки, если выражение содержит скобки).tr
может использоваться для отображения нескольких символов.
Если вам нравится Python и у вас есть возможность установить пакет, вы можете использовать эту созданную мной утилиту .
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dc
работает с поплавками. Попробуйecho '4 k 50 7 / p' | dc
. Выход есть7.1428
. Командаk
устанавливает точность.