it-swarm.com.de

Multiplikation auf dem Kommandozeilenterminal

Ich verwende ein serielles Terminal, um Input für unser Laborexperiment zu liefern. Ich fand das mit

$ echo "5X5"

gibt nur eine Zeichenfolge von "5X5". Gibt es einen Befehl zum Ausführen einer Multiplikationsoperation?

105
bouncingHippo

Ja, Sie können bashs integrierte arithmetische Erweiterung $(( )) verwenden, um einige einfache Berechnungen durchzuführen

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

Eine vollständige Liste der Operatoren finden Sie im Abschnitt Shell Arithmetic im Bash Reference Manual .

Der Vollständigkeit halber, wie bereits erwähnt, wäre bc oder dc besser, wenn Sie eine beliebige Genauigkeit benötigen.

192
KurzedMetal

Für fortgeschrittenere und genauere Mathematik sollten Sie bc (1) verwenden.

echo "3 * 2.19" | bc -l 
6.57
43
tvm

Interne Methoden

Bash unterstützt arithmetische Erweiterung mit $(( expression )). Zum Beispiel:

$ echo $(( 5 * 5 ))
25

Externe Methoden

Eine Reihe von Dienstprogrammen bieten Arithmetik, einschließlich bc und expr .

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

$ /usr/bin/expr 5 \* 5
25
16
Todd A. Jacobs

Die klassische Lösung lautet:

 expr 5 \* 5

Eine weitere Option in Nizza ist:

 echo 5 5\*p | dc

Beide Lösungen funktionieren nur mit ganzzahligen Operanden.

11
William Pursell

Eine einfache Shell-Funktion (kein sed erforderlich) sollte den Trick des Interpretierens von '5X5' machen

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

Ich benutze diese Funktion, die bc verwendet und somit Gleitkommaberechnungen unterstützt:

c () { 
    local a
    (( $# > 0 )) && a="[email protected]" || read -r -p "calc: " a
    bc -l <<< "$a"
}

Beispiel:

$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797

Bashs arithmetische Erweiterung unterstützt keine Floats (aber Korn Shell und zsh).

Beispiel:

$ ksh -c 'echo "$((3.0 / 4))"'
0.75
5

Ich habe ein einfaches Skript, das ich dafür benutze:

[email protected]:~$ cat /usr/local/bin/c

#!/bin/sh

echo "$*" | sed 's/x/\*/g' | bc -l

Es ändert x in *, Da * Ein Sonderzeichen in der Shell ist. Verwenden Sie es wie folgt:

  • c 5x5
  • c 5-4.2 + 1
  • c '(5 + 5) * 30' (Sie müssen weiterhin Anführungszeichen verwenden, wenn der Ausdruck runde Klammern enthält).
3
jnylen

Wenn Sie python und die Option haben, ein Paket zu installieren, können Sie dieses Dienstprogramm verwenden, das ich erstellt habe.

# 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
2
bombs