Table des matières
switch
Évalue un parmi plusieurs scripts, dépendant d'une valeur donnée
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.
- -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 rationnelle (comme décrit dans la page de re_syntax).
- – 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.
- La première 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} # 2
switch -regexp aaab { ^a.*b$ - b {format 1} library {format 2} default {format 3} } # 1
switch xyz { a - b { # Placement Correct du Commentaire format 1 } library { format 2 } default { format 3 } } # 3