Arithmétique Bash
Une autre solution possible est d'ajouter une fonction simple pour l'arithmétique intégrée de Bash. Placez-la dans votre .bashrc
à essayer :
=() {
echo "$(($@))"
}
Donc maintenant, vous n'avez même pas besoin $((...))
plus, juste =
ce qui semble assez naturel.
Remplacement
Autre chose si vous voulez être encore plus rapide : vous pouvez le faire remplacer p
con +
y x
con *
. Cela fonctionnera pour cela :
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Maintenant, vous n'avez même pas besoin Shift plus, la seule chose est =
devant l'arithmétique.
Sortie hexadécimale
La sortie peut être affichée à la fois en décimal et en hexadécimal, si on le souhaite. ( Hinweis : en utilisant x
La substitution sera en conflit avec l 0x...
syntaxe hexagonale)
=() {
local answer="$(($@))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Exemple :
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
Utilisation de bc
Si vous voulez des calculs un peu plus avancés, vous pouvez le passer à bc
comme ça :
=() {
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)
Les fonctions fournies par bc
sont les suivants (et peuvent être trouvés à partir de 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.
Il prend également en charge if
, for
, while
et des variables comme dans un langage de programmation, bien qu'il puisse être préférable d'écrire dans un fichier si vous le souhaitez.
Gardez à l'esprit qu'il remplacera p
y x
dans les noms de fonctions/variables. Il peut être préférable de simplement supprimer les remplacements.
Utilisation de gcalccmd
Vous pouvez également effectuer l'appel de fonction gcalccmd
(de gnome-calculator
) comme suit :
=() {
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
Les fonctions disponibles semblent être les suivantes (tirées directement de le code source ), ==
dénote des fonctions équivalentes :
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()