Я использую последовательный терминал, чтобы обеспечить ввод в наш лабораторный эксперимент. Я обнаружил, что используя
$ echo "5X5"
возвращает строку "5X5"
. Есть ли команда для выполнения операции умножения?
Я использую последовательный терминал, чтобы обеспечить ввод в наш лабораторный эксперимент. Я обнаружил, что используя
$ echo "5X5"
возвращает строку "5X5"
. Есть ли команда для выполнения операции умножения?
Да, вы можете использовать bash встроенное арифметическое расширение $(( ))
для выполнения простых математических вычислений
$ echo "$((5 * 5))"
25
Отметьте раздел "Арифметика оболочки" в справочном руководстве Bash для полного списка операторов.
Для полноты, как указано в других случаях, если вам нужна произвольная точность, bc
или dc
было бы лучше.
Для более продвинутой и точной математики рассмотрим использование bc (1).
echo "3 * 2.19" | bc -l
6.57
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
Оба этих решения будут работать только с целыми операндами.
Простая функция оболочки (без необходимости sed) должна делать трюк интерпретации '5X5'
$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25
Я использую эту функцию, которая использует bc
и, следовательно, поддерживает вычисления с плавающей запятой:
c () {
local a
(( $# > 0 )) && a="[email protected]" || read -r -p "calc: " a
bc -l <<< "$a"
}
Пример:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Bash арифметическое расширение не поддерживает float (но оболочка Korn и zsh do).
Пример:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
У меня есть простой script я использую для этого:
[email protected]:~$ 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'
(вам все равно придется использовать кавычки, если выражение содержит любые круглые скобки).