bash: $ [] par rapport à $ (())
-
19-09-2019 - |
Question
Je viens trébuché sur la syntaxe bash:
foo=42
bar=$[foo+1] # evaluates an arithmetic expression
Quand je googlé pour cela, j'ai trouvé http: // tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05 :
3.4.6. développement arithmétique
dilatation arithmétique permet l'évaluation d'une expression arithmétique et la substitution du résultat. Le format de l'expansion arithmétique est:
$(( EXPRESSION ))
...
Dans la mesure du possible, les utilisateurs de Bash devraient essayer d'utiliser la syntaxe avec des crochets:
$[ EXPRESSION ]
Cependant, cela ne calculer le résultat de l'expression, et ne pas de tests ...
Dans ma page man bash je ne peux trouver la forme de $(( EXPRESSION ))
tels que:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
Alors que les tests ne sont pas effectués avec $[...]
que faire avec $((...))
, ou est le $[...]
juste une ancienne version de $((...))
?
La solution
La page de manuel pour v3.2.48 bash dit:
[...] Le format d'expansion arithmétique est:
$((expression))
ancien format $ [expression] est dépréciée et sera supprimée dans les prochaines versions de bash.
$[...]
est ancienne syntaxe qui ne doit pas être utilisé plus.
Autres conseils
@sth est tout à fait correct. Et si vous êtes curieux de savoir pourquoi une syntaxe plus bavard est maintenant en faveur, consultez cet ancien e-mail de la liste de diffusion.
http://lists.gnu.org/archive/html/bug -bash / 2012-04 / msg00033.html
« Dans les premières propositions, une forme $ a été utilisé [expression]. Il était fonctionnellement équivalent à « $ (()) » du texte actuel, mais des objections ont été déposée que le 1988 KornShell avait déjà mis en place « $ (()) » et il n'y avait aucune raison impérieuse d'inventer une autre syntaxe. En outre, la syntaxe « $ [] » avait une incompatibilité mineure impliquant les motifs dans les déclarations de cas. »
Je ne suis pas sûr que j'aime la raison d'être «mais quelqu'un a déjà fait plus verbeux, » mais là vous l'avez, peut-être le problème au cas déclaration était plus convaincante que j'imagine de cette mention obscure?