Ich verwende ein serielles Terminal, um Eingaben in unser Laborexperiment zu liefern. Ich fand das mit
$ echo "5X5"
Gibt nur eine Zeichenfolge von zurück "5X5"
. Gibt es einen Befehl zum Ausführen einer Multiplikationsoperation?
Ich verwende ein serielles Terminal, um Eingaben in unser Laborexperiment zu liefern. Ich fand das mit
$ echo "5X5"
Gibt nur eine Zeichenfolge von zurück "5X5"
. Gibt es einen Befehl zum Ausführen einer Multiplikationsoperation?
Antworten:
Ja, Sie können die integrierte arithmetische Erweiterung$(( ))
von bash verwenden , um einige einfache Berechnungen durchzuführen
$ echo "$((5 * 5))"
25
Überprüfen Sie den Abschnitt Shell Arithmetic im Bash Reference ManualEine vollständige Liste der Operatoren finden .
Der Vollständigkeit halber, wie andere betonten, wenn Sie willkürliche Präzision benötigen bc
oder dc
besser wären.
Bash unterstützt die arithmetische Erweiterung mit $(( expression ))
. Beispielsweise:
$ echo $(( 5 * 5 ))
25
Eine Reihe von Dienstprogrammen bietet Arithmetik, einschließlich bc und expr .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Die klassische Lösung lautet:
expr 5 \* 5
Eine weitere schöne Option ist:
echo 5 5\*p | dc
Beide Lösungen funktionieren nur mit ganzzahligen Operanden.
k
. Ich erinnere mich sicherlich, dass die Standardgenauigkeit 0 war (Kürzung auf Ganzzahl). Erinnere ich mich falsch oder ist es einfach so, dass neuere Implementierungen das Verhalten geändert haben?
dc
Laufe der Jahre nur selten verwendet, da ich algebraischer und weniger RPN bin, also erinnere ich mich nicht. Auf einem GNU-System, das ich verwende, ist der Standardwert 0. Eine alte (1993) FreeBSD- man
Seite erwähnt, dass der Standardwert Null ist, ältere BSD- man
Seiten jedoch nicht.
echo '4 k 50.5 7 / p' | dc
funktioniert (Ausgabe :) 7.2142
.
Ich benutze diese Funktion, die bc
Gleitkommaberechnungen verwendet und somit unterstützt:
c () {
local a
(( $# > 0 )) && a="$@" || 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 (Korn Shell und Zsh jedoch).
Beispiel:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
Ich habe ein einfaches Skript, das ich dafür benutze:
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
Es ändert sich x
zu, *
da *
es sich um ein Sonderzeichen in der Shell handelt. Verwenden Sie es wie folgt:
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(Sie müssen immer noch Anführungszeichen verwenden, wenn der Ausdruck Klammern enthält.)tr
kann verwendet werden, um eine Zeichenzuordnung für mehrere Zeichen durchzuführen.
Wenn Sie Python mögen und die Option haben, ein Paket zu installieren, können Sie dieses von mir erstellte Dienstprogramm verwenden .
# 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
arbeitet mit schwimmern. Versuchen Sie esecho '4 k 50 7 / p' | dc
. Die Ausgabe ist7.1428
. Derk
Befehl legt die Genauigkeit fest.