J'essaieComment faire exponentiation en bash
echo 10**2
il imprime 10**2
. Comment le faire fonctionner?
J'essaieComment faire exponentiation en bash
echo 10**2
il imprime 10**2
. Comment le faire fonctionner?
Vous pouvez faire:
let var=10**2 # sets var to 100.
ou encore mieux et recommandé ainsi:
var=$((10**2)) # sets var to 100.
Si vous voulez imprimer l'expression résultat que vous pouvez faire:
echo $((10**2)) # prints 100.
Pour grands nombres, vous pouvez utiliser l'opérateur d'exponentiation de bc
comme:
bash:$ echo 2^100 | bc
1267650600228229401496703205376
Si vous voulez stocker le résultat ci-dessus dans une variable que vous pouvez à nouveau utiliser la syntaxe $(())
comme:
var=$((echo 2^100 | bc))
diverses façons
Bash
x=2
echo $((x**2))
Awk
awk 'BEGIN{print 2**2}'
bc
echo "2^2" |bc
dc
dc -e '2 2^p'
En fait var=$((echo 2^100 | bc))
ne fonctionne pas - bash essaie de faire des mathématiques à l'intérieur (())
. Mais une séquence de ligne de commande est là à la place de sorte qu'il crée une erreur
var=$(echo 2^100 | bc)
fonctionne comme la valeur est le résultat de la ligne de commande exécutant l'intérieur ()
Au lieu de '$ ((...))' il est également possible d'utiliser '$ [...]'. Je trouve ce dernier plus visuellement plus attrayant mais c'est juste mon goût. Je ne sais pas s'il y a des différences entre les deux, cependant. Il semble qu'ils se comportent de la même manière. – DarkDust
Alberto: toutes ces parenthèses, let et $ sont nécessaires parce que bash, étant un simple interpréteur en ligne de commande, fait mieux de supposer que tout est une chaîne et devrait être traité comme tel, sauf indication contraire explicite. Saludos! – slezica