Я використовую послідовний термінал, щоб надати вклад в наш експеримент в лабораторії. Я виявив, що використовуючи
$ 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 5x5c 5-4.2 + 1c '(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Команда встановлює точність.