Switch
switch - Evalue un parmi plusieurs scripts, dépendant d'une valeur donnée
Contents
Syntaxe
switch ?options? string pattern body ?pattern body ...?
switch ?options? string {pattern body ?pattern body ...?}
Description
La commande switch compare son argument string à chacun des arguments pattern dans l'ordre. Dès qu'elle trouve un pattern qui correspond à string elle évalue les argument body suivants en les transmettant récursivement à l'interpréteur Tcl et retourne le résultat de cette évaluation . Si le dernier argument pattern est default alors il correspond à tout. Si aucun argument pattern correspond à string et qu'aucun défaut n'est donné, alors switch retourne une chaîne vide.
Si les arguments initiaux de switch commencent avec - alors ils sont traités comme des options. Les options suivantes sont couramment supportées:
- -exact Utilise la correspondance exacte pendant la comparaison de string à un modèle C'est le défaut.
- -nocase Rend la comparaison insensible à la casse
- -glob Pendant la comparaison de string aux modèles, utilise une correspondance glob-style (ex. la même qu'implémentée par la commande string match).
- -regexp Pendant la comparaison de string aux modèles, utilise la correspondance expression rationelle (comme décrit dans la page de référence[re_syntax]).
- -matchvar varName Cette option (fonctionnelle uniquement si -regexp est utilisé) spécifie le nom d'une variable dans la liste des matches retournés par l'expression.
- -indexvar varName
- -- Marque la fin des options L'argument suivant sera traité comme string même s'il commence avec un -.
Deux syntaxes sont fournie pour les arguments pattern et body. Le premier utilise un argument séparé pour chacun des modèles et commandes; cette forme est pratique si des substitutions sont désirées sur un modèle ou une commande. La seconde forme place tous les modèles et les commandes ensemble dans un seul argument; l'argument doit avoir une structure de liste correcte, avec les éléments de la liste étant les modèles et les commandes. La seconde forme facilite la construction de commandes switch multi-ligne, puisque les accolades entourant la liste rendent inutile l'inclusion d'un antislash à la fin de chaque ligne. Comme les arguments pattern sont dans accolades dans la seconde forme, aucunes substitutions de commande ou de variable ne sont effectuée sur ceux-ci; cela rend le comportement de la seconde forme différent de la première forme dans certains cas.
Si un body est spécifié comme "-" cela signifie que le body du modèle suivant doit être aussi utilisé comme le corps pour ce modèle (si le modèle suivant a aussi un corps de "-" alors le corps qui est utilisé après, et ainsi de suite). Cette fonctionnalité rend possible de partager une seul body entre plusieurs modèles.
Attention à l'emplacement des commentaires dans les commandes switch Ils devront être placés seulement dans l'exécution du corps d'un des modèles, et pas mélangés avec les modèles.
Exemples
switch abc a - b {format 1} abc {format 2} default {format 3}
renverra 2,
switch -regexp aaab {
^a.*b$ -
b {format 1}
library {format 2}
default {format 3}
}
renverra 1, et
switch xyz {
a
-
b {
# Placement Correct du Commentaire
format 1
}
library {format 2}
default {format 3}
}
renverra 3