[gull] Truc et astuces: calculs entiers en bash

felix felix at f-hauri.ch
Thu Aug 5 15:37:09 CEST 2021


Bonjour,

En bash, on peut faire un calcul entier suivant la syntaxe:

   val=$(( 3 * 7 * 2 ))

comme:

   declare -i val
   val=' 3 * 7 * 2 '

dans les 2 cas, la variable 'val' contiendra '42'.

Par contre, il y a une différence de performance:

  https://f-hauri.ch/vrac/bashInteger.sh.txt

Voici le temps qui a fallu pour assigner 491'022x '11 ** 12 / 3 % 470' à une
variable, compte tenus que cette variable soit définie comme chaine de
caractère ou comme nombre entier (declare -i).

  String var = '...'      :  618.378ms  -> '11 ** 12 / 3 % 470'
  Integer var = '...'     :  832.276ms  -> '80'
  String var = $(( ... )) : 1123.090ms  -> '80'
  Integer var = $(( ... )): 1124.578ms  -> '80'

Assigner
 - une chaine à une variable chaine est rapide, bon.
 - une chaine à une variable de type entier -> calcul bash rapide.
 - un entier calculé à une variable chaine -> calcul bash  moins rapide.
 - un entier à une variable de type entier, un tout petit poil moins rapide

Donc, quand le calcul est fait avec $((...)), c'est presque 2x moins rapide
que si bash fait l'opération en assignant à une variable entière.

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list