Dans votre premier exemple, $((X+1))
évalue l'expression X + 1 et développe le résultat, qui est ensuite assigné à la variable.
Dans le deuxième exemple, par $((X=X+1))
incréments X
d'une unité ( $((X++))
est également valable et plus courte, mais pas nécessairement pris en charge par l'enveloppe), puis se dilate à la nouvelle valeur de $X
qui est le premier argument de la commande null, :
. La commande null ignore ses arguments et le résultat est rejeté (avec effets secondaires).
Je préférerais personnellement la première forme pour trois raisons (relativement subjectives):
- La commande null est obscure et mal comprise, comme indiqué par le fait qu'elle fait souvent l'objet de questions confuses ici.
- La première forme semble plus naturelle en termes de grammaire globale du shell, et ressemble même un peu à l'ancien style d'évaluation.
- Le premier formulaire est plus clair et plus concis et n'implique pas de commande.
Vous devez utiliser la première version si vous modifiez l'environnement d'une seule commande comme
X=$((X+1)) /usr/local/bin/something
Vous devez utiliser le deuxième formulaire pour ajouter directement une évaluation aux arguments:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Cela a les effets secondaires souhaités, enregistre une ligne et est assez clair.