11.5. Valeur d'une expression arithmétique

La commande interne (( expr_arith )) n'affiche pas sur la sortie standard la valeur de l'expression arithmétique expr_arith.

Pour obtenir la valeur de l'expression arithmétique, on utilise la syntaxe : $(( expr_arith ))

Exemples :

echo $(( 7 * 2 ))
echo $(( a= 12*8 ))
echo $(( 7 < 10 ))

Substitutions de commandes et substitutions de paramètres peuvent être présentes dans une commande interne (( ou bien dans une substitution d’expression arithmétique $(( )) si le résultat aboutit à un nombre entier.

Par exemple, dans l’expression $(( $(ls -l | wc -l) -1 )) le résultat du pipeline ls -l | wc –l peut être interprété comme un nombre.

Attention : lors de l'évaluation d'une expression arithmétique, les débordements éventuels ne sont pas détectés.

$ echo $((897655*785409*56789*6789999999999999999999 ))
-848393034087410691    => nombre négatif !
$

Si l’on souhaite utiliser de grands entiers (ou des nombres réels), il est préférable d’utiliser la commande unix bc.

$ bc –q
897655*785409*56789*6789999999999999999999
271856250888322242449959962260546638845
quit			=> pour sortir de bc	
$

L’option –q de bc évite l’affichage du message de bienvenue lorsqu’on utilise cette commande de manière interactive.

Basée sur le contexte, l’interprétation des expressions arithmétiques est particulièrement souple en bash.

$ declare -i x=35
$
$ z=x+5          => affectation de la chaîne x+5 à la variable z
$ echo $z
x+5              => non évaluée car par défaut z est de type chaîne de caractères
$
$ echo $((z))    => par le contexte, z est évaluée comme une variable de type entier
40
$ (( z = z+1))
$ echo $z
41
$