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 $