Bash Arithmetic
Un'altra possibile soluzione è aggiungere una semplice funzione per l'aritmetica integrata di Bash. Metti questo nel tuo .bashrcfile per provare:
=() {
echo "$(($@))"
}
Quindi ora, non hai nemmeno $((...))più bisogno , solo =che sembra abbastanza naturale.
Sostituzione
Un'altra cosa se vuoi essere ancora più veloce: puoi farlo sostituire pcon +e xcon *. Questo funzionerà per questo:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Ora non hai nemmeno Shiftpiù bisogno , l'unica cosa è = di fronte all'aritmetica.
Uscita esadecimale
L'output può essere visualizzato sia in decimale sia in esadecimale, se lo si desidera. ( Nota : l'utilizzo della xsostituzione sarà in conflitto con la 0x...sintassi esadecimale)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Esempio:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
utilizzando bc
Se desideri calcoli leggermente più avanzati, puoi inoltrarlo in questo bcmodo:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
bc -l <<<"scale=10;$calc"
}
= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)' # Returns pi (3.1415926532)
Le funzioni fornite da bcsono le seguenti (e possono essere trovate da man bc):
sqrt ( expression )
The value of the sqrt function is the square root of the expression.
If the expression is negative, a run time error is generated.
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x)
The Bessel function of integer order n of x.
Supporta anche if, for, whilee variabili come un linguaggio di programmazione anche se può essere meglio per scrivere in un file se si voleva che.
Tieni presente che sostituirà pe xin nomi di funzioni / variabili. Potrebbe essere meglio rimuovere solo le sostituzioni.
utilizzando gcalccmd
Puoi anche effettuare la chiamata di funzione gcalccmd(da gnome-calculator) in questo modo:
=() {
local IFS=' '
local calc="$*"
# Uncomment the below for (p → +) and (x → *)
#calc="${calc//p/+}"
#calc="${calc//x/*}"
printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}
= 'sqrt(2)' # Returns 1.4142135623
= '4^4' # Returns 256
Le funzioni disponibili sembrano essere (prese direttamente dal codice sorgente ), ==denotano funzioni equivalenti:
ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()