Arytmetyka Bash
Innym możliwym rozwiązaniem jest dodanie prostej funkcji do wbudowanej arytmetyki Bash. Umieść to w swoim .bashrcpliku, aby spróbować:
=() {
echo "$(($@))"
}
Więc teraz już nie potrzebujesz $((...)), =co wydaje się dość naturalne.
Zastąpienie
Inną rzeczą, jeśli chcesz być jeszcze szybciej: można je zastąpić pz +i xz *. To zadziała do tego:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Teraz już nawet nie potrzebujesz Shift, jedyne, co jest = przed arytmetyką.
Wyjście szesnastkowe
W razie potrzeby dane wyjściowe mogą być wyświetlane zarówno w systemie dziesiętnym, jak i szesnastkowym. ( Uwaga : użycie xpodstawienia spowoduje konflikt ze 0x...składnią szesnastkową)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Przykład:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
Za pomocą bc
Jeśli chcesz nieco bardziej zaawansowanych obliczeń, możesz odpowiednio potokować bc:
=() {
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)
Funkcje zapewniane przez bcsą następujące (i można je znaleźć w 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.
Wspiera on także if, for, whilei zmienne, takie jak język programowania ale jeśli może lepiej byłoby napisać do pliku jeśli chciałeś to.
Należy pamiętać, że będzie on zastąpić pi xw funkcji / nazw zmiennych. Lepiej po prostu usunąć zamienniki.
Za pomocą gcalccmd
Możesz także wykonać wywołanie funkcji gcalccmd(z gnome-calculator) w następujący sposób:
=() {
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
Dostępne funkcje wydają się być (wzięte bezpośrednio z kodu źródłowego ), co ==oznacza równoważne funkcje:
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()