# Calcul en shell

**URL:** <https://www.debian-fr.org/t/calcul-en-shell/27556>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 10:50 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556 "2016-02-20T22:50:44Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![antalgeek1](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/a6a055/32.png) [@antalgeek1](https://www.debian-fr.org/u/antalgeek1)\
**Post date:** [Février 20, 2016, 10:50 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556/1 "2016-02-20T22:50:44Z")

</div>

Salut,

Dans un script bash j’ai eu besoin de faire des calculs avec des nombres non entiers.  
Un truc compliqué du genre 1,4+3,5  
J’ai utilisé bc avec une ligne du genre :

```auto

```

On ne peut pas trouver plus simple, tout en restant en bash ?

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 20, 2016, 10:50 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556/2 "2016-02-20T22:50:46Z")

</div>

Bonjour,

Il est possible d’effectuer des calculs en bash mais sans décimales.  
Ceci dit, tu peux utiliser la syntaxe “Here-String” afin d’alléger ta commande :

```auto
BIDULE=$(bc <<< "scale=2; 1.4+3.5")
```

Note : la syntaxe $(…) est à utiliser de préférence à la syntaxe `...`

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 10:59 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556/3 "2016-02-20T22:59:38Z")

</div>

[quote=“Totor”]Note : la syntaxe $(…) est à utiliser de préférence à la syntaxe `...`[/quote] Pourquoi ? Tu aurais plus d’infos quand à la différence entre ces deux syntaxes ?

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:59 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556/4 "2016-02-20T22:59:43Z")

</div>

> [@Ashgenesis](#):
>
> [quote=«&nbsp;Totor&nbsp;»]Note : la syntaxe $(…) est à utiliser de préférence à la syntaxe `...`[/quote] Pourquoi ? Tu aurais plus d’infos quand à la différence entre ces deux syntaxes ?

La seule différence c’est que l’une peu être imbriquée alors que l’autre non.

Je suis d’avis que si tu commence à avoir à en imbriquer il y a peut être un travail de réflexion à faire sur le script.

---

<div class="post-metadata">

**Author:** ![Totor](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/58f4c7/32.png) [@Totor](https://www.debian-fr.org/u/Totor)\
**Post date:** [Février 20, 2016, 11:00 UTC](https://www.debian-fr.org/t/calcul-en-shell/27556/5 "2016-02-20T23:00:07Z")

</div>

> [@MisterFreez](#):
>
> La seule différence c’est que l’une peu être imbriquée alors que l’autre non.

Erreur, il peut y avoir imbrication avec les 2 syntaxes.  
Mais avec l’ancienne forme (i.e `cmd`) il faut protéger les `, ce qui alourdi la syntaxe.

Pour la différence :

> [@man bash](#):
>
> ```
> $(command)
> 
> ```
> 
> or  
> `command`  
> Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted. Embedded newlines are not deleted, but they may be removed during word splitting. The command substitution $(cat file) can be replaced by the equivalent but faster $(\< file).
> 
> When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by ‘$’, ‘`’, or ‘\’. The first backquote not preceded by a backslash terminates the command substitution. When using the $(command) form, all characters between the parentheses make up the command; none are treated specially.  
>    
> Command substitutions may be nested. To nest when using the backquoted form, escape the inner backquotes with backslashes.
> 
> If the substitution appears within double quotes, word splitting and filename expansion are not performed on the results.

Ce qui signifie que le caractère \ perd sa signification d’échappement et ne protège donc plus le caractère qui le suit à l’exception des 3 caractères cités.

Mais la 2nde est surtout à privilégier pour une question de lisibilité. Ce n’est peut-être qu’un détail mais avec l’ancienne forme, la délimitation de la commande peut ne pas être clairement représentée (le ` peut être celui de début ou celui de fin de délimitation)  
A vrai dire, il est possible que ce soit un point de vu personnel 😒
