Множення на терміналі командного рядка


115

Я використовую послідовний термінал, щоб надати вклад в наш експеримент в лабораторії. Я виявив, що використовуючи

$ echo "5X5"

просто повертає рядок "5X5". Чи є команда виконати операцію множення?

Відповіді:


208

Так, ви можете використовувати вбудоване арифметичне розширення bash,$(( )) щоб зробити кілька простих математичних

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

Перевірте розділ «Арифметика оболонки» в Довідковому посібнику Bash для повного переліку операторів.

Заради повноти, як вказували інші, якщо вам потрібна довільна точність, bcабо dcбуло б краще.


45

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

echo "3 * 2.19" | bc -l 
6.57


15

Класичне рішення:

 expr 5 \* 5

Ще один приємний варіант:

 echo 5 5\*p | dc

Обидва ці рішення працюватимуть лише з цілими операндами.


1
dcпрацює з поплавками. Спробуйте echo '4 k 50 7 / p' | dc. Вихід є 7.1428. kКоманда встановлює точність.
Призупинено до подальшого повідомлення.

@Dennis У двох різних реалізаціях постійного струму я бачу операції з плаваючою роботою, не призначаючи через k. Я, звичайно, пам’ятаю точність за замовчуванням 0 (усічення до цілого числа). Я неправильно запам’ятовую, чи просто новіші реалізації змінили поведінку?
Вільям Перселл

Я використовував dcрідко протягом багатьох років, оскільки я більше алгебраїчний і менше RPN, тому я не пам'ятаю. В системі GNU , я використовую, за замовчуванням дорівнює 0. стара (1993) FreeBSD manсторінки згадується за замовчуванням дорівнює нуль, але старий BSD manсторінки немає.
Призупинено до подальшого повідомлення.

До речі (для майбутніх читачів) мій приклад повинен був показати не цілі операнди, а не лише цілий результат, щоб точно протиставити твердження. Ніколи не бійся, echo '4 k 50.5 7 / p' | dcпрацює (вихід:) 7.2142.
Призупинено до подальшого повідомлення.

8

Проста функція оболонки (не потрібна сідалка) повинна робити фокус інтерпретації "5X5"

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

6

Я використовую цю функцію, яка використовує 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

4

У мене є простий сценарій, який я використовую для цього:

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можна використовувати для картографування символів для кількох символів.
Призупинено до подальшого повідомлення.

3

Якщо вам подобається 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.