Évalue une expression
expr arg ?arg arg ...?
Concatène arg's (en y ajoutant des séparateurs espaces), évalue le résultat comme expression Tcl, et retourne la valeur. Les opérateurs autorisés dans les expressions Tcl sont un sous ensemble des opérateurs autorisés dans les expressions C, et ils ont les même sens et préséance que les opérateurs C correspondants. Les expressions donnent presque toujours des résultats numériques (entier ou valeurs flottantes). Par exemple, l'expression expr 8.2 + 6 est évaluée à 14.2. Les expressions Tcl diffèrent des expressions C dans le sens ou les opérandes sont spécifiés. De plus, les expressions Tcl supportent les opérandes non-numériques et les comparaisons de chaînes.
Une expression Tcl consiste en une combinaison d'opérandes, d'opérateurs, et de parenthèses. L'espace peut être employé entre les opérandes, opérateurs et parenthèses; il est ignoré par les instructions d'expression. Si possible, les opérandes sont interprétés comme des valeurs entières. Les valeurs entières peuvent être spécifiées en décimal (le cas normal), en octal (si le premier caractère de l'opérande est 0), ou en hexadécimal (si les deux premiers caractères de l'opérande sont 0x). Si un opérande n'est pas un des formats entiers donnés plus haut, alors il est traité comme un nombre flottant si c'est possible. Les nombres flottants peuvent être spécifiés de toutes les manières acceptées par un compilateur compatible ANSI-C (excepté que les suffixes f, F, l, et L ne seront pas autorisés dans la plupart des installations). Par exemple, tous les nombres flottants suivants sont valides : 2.1, 3., 6e4, 7.91e+16. Si aucune interprétation numérique n'est possible, alors un opérande est considéré comme une chaîne (et seulement un ensemble limité d'opérateurs peut lui être appliqué).
Les opérandes peuvent être spécifiés d'une des façons suivantes:
Ou les substitutions se produisent plus haut (ex. dans les chaînes entre guillemets), elles sont effectuées par les instructions des expressions. Néanmoins, une couche de substitution supplémentaire peut déjà avoir été effectuée par l'analyseur de commande avant que le processeur d'expression ait été appelé. Comme expliqué ci-dessous, il est préférable d'entourer les expressions dans des accolades pour empêcher l'analyseur de commande d'effectuer des substitutions sur le contenu.
Les opérateurs valides sont listés ci-dessous, groupés en ordre de préséance décroissant:
Voir le manuel C pour plus de détails sur les résultats produits par chaque opérateur. Tous les opérateurs binaire sont groupés de gauche à droite à l'intérieur d'un même niveau de préséance. Par exemple, la commande expr 4*2 < 7 retourne 0.
Les opérateurs &&, ||, et ?: ont une “évaluation paresseuse”, juste comme en C, ce qui signifie que ces opérandes ne ont pas évalués s'ils ne sont pas nécessaires pour déterminer le résultat. Par exemple, dans la commande expr {$v ? [[a]] : [[b]]} seulement un des [a] ou [b] sera évalué, dépendant de la valeur de $v. Notez, néanmoins, que ceci est seulement vrai si l'expression entière est entourée d'accolades; autrement l'analyseur Tcl évaluera [a] et [b] avant d'appeler la commande expr.
Tcl supporte les fonctions mathématiques suivantes dans les expressions :