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 bcoder dcbesser 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?
dcLaufe 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- manSeite erwähnt, dass der Standardwert Null ist, ältere BSD- manSeiten jedoch nicht.
echo '4 k 50.5 7 / p' | dcfunktioniert (Ausgabe :) 7.2142.
Ich benutze diese Funktion, die bcGleitkommaberechnungen 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 xzu, *da *es sich um ein Sonderzeichen in der Shell handelt. Verwenden Sie es wie folgt:
c 5x5c 5-4.2 + 1c '(5 + 5) * 30' (Sie müssen immer noch Anführungszeichen verwenden, wenn der Ausdruck Klammern enthält.)trkann 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
dcarbeitet mit schwimmern. Versuchen Sie esecho '4 k 50 7 / p' | dc. Die Ausgabe ist7.1428. DerkBefehl legt die Genauigkeit fest.