Я використовую послідовний термінал, щоб надати вклад в наш експеримент в лабораторії. Я виявив, що використовуючи
$ echo "5X5"
просто повертає рядок "5X5"
. Чи є команда виконати операцію множення?
Я використовую послідовний термінал, щоб надати вклад в наш експеримент в лабораторії. Я виявив, що використовуючи
$ echo "5X5"
просто повертає рядок "5X5"
. Чи є команда виконати операцію множення?
Відповіді:
Так, ви можете використовувати вбудоване арифметичне розширення bash,$(( ))
щоб зробити кілька простих математичних
$ echo "$((5 * 5))"
25
Перевірте розділ «Арифметика оболонки» в Довідковому посібнику Bash для повного переліку операторів.
Заради повноти, як вказували інші, якщо вам потрібна довільна точність, 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) FreeBSD man
сторінки згадується за замовчуванням дорівнює нуль, але старий BSD man
сторінки немає.
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 не підтримує floats (але оболонка Korn і zsh do).
Приклад:
$ 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
Команда встановлює точність.