Умножение на терминале командной строки

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

$ echo "5X5"

возвращает строку "5X5". Есть ли команда для выполнения операции умножения?

Ответ 1

Да, вы можете использовать bash встроенное арифметическое расширение $(( )) для выполнения простых математических вычислений

$ echo "$((5 * 5))"
25

Отметьте раздел "Арифметика оболочки" в справочном руководстве Bash для полного списка операторов.

Для полноты, как указано в других случаях, если вам нужна произвольная точность, bc или dc было бы лучше.

Ответ 2

Для более продвинутой и точной математики рассмотрим использование bc (1).

echo "3 * 2.19" | bc -l 
6.57

Ответ 3

Внутренние методы

Bash поддерживает арифметическое расширение с помощью $(( expression )). Например:

$ echo $(( 5 * 5 ))
25

Внешние методы

Несколько утилит обеспечивают арифметику, включая bc и expr.

$ echo '5 * 5' | /usr/bin/bc
25

$ /usr/bin/expr 5 \* 5
25

Ответ 4

Классическое решение:

 expr 5 \* 5

Еще один приятный вариант:

 echo 5 5\*p | dc

Оба этих решения будут работать только с целыми операндами.

Ответ 5

Простая функция оболочки (без необходимости sed) должна делать трюк интерпретации '5X5'

$ function calc { bc -l <<< ${@//[xX]/*}; };
$ calc 5X5
25
$ calc 5x5
25
$ calc '5*5'
25

Ответ 6

Я использую эту функцию, которая использует 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

Ответ 7

У меня есть простой 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' (вам все равно придется использовать кавычки, если выражение содержит любые круглые скобки).