Es gibt viele Möglichkeiten !!!
Zusammenfassung
$ printf %.10f\\n "$((10**9 * 20/7))e-9" # many shells. Not mksh.
$ echo "$((20.0/7))" # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc
$ echo 4 k 20 5 2 / + p | dc
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl
Einzelheiten
Muscheln
Sie können POSIX arithmetische Erweiterung für verwenden Integer - Arithmetik echo "$((...))"
:
$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22
Ziemlich portabel ( ash dash yash bash ksh93 lksh zsh
):
Mit der printf-Funktion zum Drucken von Floats können wir die meisten Shells erweitern, um Gleitkomma-Berechnungen durchzuführen, wenn auch mit einem begrenzten Bereich (nicht mehr als 10 Stellen):
$ printf %.10f\\n "$((1000000000 * 20/7 ))e-9"
2.8571428570
ksh93
, yash
und zsh
unterstütze Floats hier:
$ echo "$((1.2 / 3))"
0.4
nur ksh93
(direkt) und zsh
Laden der Bibliothek mathfunc hier:
$ echo "$((4*atan(1)))"
3.14159265358979324
( zsh
müssen geladen werden zmodload zsh/mathfunc
, um Funktionen wie zu erhalten atan
).
Interaktiv mit zsh:
$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17
Mit (t) csh (nur Ganzzahl):
% @ a=25 / 3; echo $a
8
In der rc
Shell-Familie akanga
ist die mit arithmetischer Erweiterung:
; echo $:25/3
8
POSIX-Werkzeugkasten
bc
(siehe unten für den interaktiven Modus), Handbuch hier
Mnemonic: best calculator (obwohl das b
eigentlich für basic ist ).
$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000
(unterstützt beliebige Präzisionszahlen)
bc interaktiver Modus:
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
5+5
10
2.2+3.3
5.5
Rushs Lösung expr
(kein interaktiver Modus):
$ expr 20 + 5
25
$ expr 20 + 5 / 2
22
Joshuas Lösung : awk
(kein interaktiver Modus):
$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333
Andere mehr oder weniger tragbare Werkzeuge
Die Lösung von Arcegedc
(interaktiver Modus :)dc
:
Was noch mehr Spaß macht, da es in umgekehrter polnischer Notation funktioniert.
$ echo 20 5 2 / + p | dc
22
$ echo 4 k 20 5 2 / + p | dc
22.5000
Aber nicht so praktisch, es sei denn, Sie arbeiten viel mit umgekehrter polnischer Notation.
Beachten Sie, dass es dc
älter ist bc
und in bc
der Vergangenheit als Wrapper implementiert wurde dc
, dc
jedoch nicht von POSIX standardisiert wurde
DQdims 's calc
(erforderlich sudo apt-get install apcalc)
:
$ calc 2 + 4
6
Allzwecksprachdolmetscher:
manatworks lösung, node
(interaktiver modus :; ausgabefunktionnode
nicht erforderlich):
$ node -pe 20+5/2 # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5
Perl (interaktiver Modus:) perl -de 1
:
$ perl -E "say 20+5/2"
22.5
Python (interaktiver Modus python
:; Ausgabefunktion nicht erforderlich):
$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5
Unterstützt auch beliebige Präzisionszahlen:
$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184
Wenn Sie clisp
installiert haben, können Sie auch die polnische Notation verwenden:
$ clisp -x "(+ 2 2)"
Marcos Lösung lua
(interaktiver Modus:) lua
:
$ lua -e "print(20+5/2)"
22.5
PHP (interaktiver Modus:) php -a
:
$ php -r 'echo 20+5/2;'
22.5
Ruby (interaktiver Modus irb
:; Ausgabefunktion nicht erforderlich):
$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5
Guile (interaktiver Modus :)guile
:
$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5
S-Lang (interaktiver Modus slsh
:; Ausgabefunktion nicht erforderlich, nur ein ;
Abschlusszeichen):
$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000
Tcl (interaktiver Modus tclsh
:; Ausgabefunktion wird nicht benötigt, ist aber expr
):
$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5
Javascript- Shells:
$ smjs
js> 25/3
8.333333333333334
js>
$ jspl
JSC: 25/3
RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...
$ node
> 25/3
8.333333333333334
>
Verschiedene SQL's:
SQLite (interaktiver Modus :)sqlite3
:
$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5
MySQL :
mysql -BNe 'select 1+1'
PostgreSQL :
psql -tAc 'select 1+1
_Die Optionen für mysql und postgres stoppen das 'ASCII Art'-Image!
Spezialisierte mathematisch orientierte Sprachen:
R im normalen Modus - Lässt 1000 normale Zufallszahlen generieren und die Standardabweichung abrufen und ausdrucken
$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997
R mit dem kleinen Skript - Lässt pi im Quadrat drucken
$ r -e 'cat(pi^2, "\n")'
9.869604
$ r -e 'print(sum(1:100))'
[1] 5050
PARI / GP , ein umfangreiches Computeralgebrasystem für Zahlentheorie, lineare Algebra und viele andere Dinge
$ echo "prime(1000)"|gp -q
7919 // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3] // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15 // 1+2+3+4+5
GNU Octave (eine hochinterpretierte Sprache, die hauptsächlich für numerische Berechnungen gedacht ist)
Unterstützt auch komplexe Zahlen:
$ octave
>> 1.2 / 7
ans = 0.17143
>> sqrt(-1)
ans = 0 + 1i
Julia , Hochleistungssprache und Dolmetscherin für wissenschaftliches und numerisches Rechnen.
Nicht interaktive Option:
$ julia -E '2.5+3.7'
6.2
bc
, kann es sich lohnen, über die-l
Option in der Manpage nachzulesen .