2011-01-06 3 views
2

Je me bats en essayant d'utiliser une déclaration de comparaison concise pour éviter un tas de "si a = b ou a = c ou d = un ou a = e", etc.cordes/tcsh sous-chaînes correspondantes

Au lieu de cela, j'essaie d'utiliser regex et la correspondance de modèle comme vous le feriez en perl.

avec

set st = "red"

la ligne

if ($ st = ~ jaune | bleu | rouge | vert)

ne fonctionne tout simplement pas (si: Expression syntaxe.) J'ai essayé avec citation s, parenthèses, mais je n'obtiens jamais le résultat attendu, si aucune erreur.

est-il un moyen d'éviter la construction lourde:

if ($ st == jaune) || ($ st == bleu) || ($ st == red) || ($ st == vert)?

Ou une autre façon de poser la même question: est-ce que tcsh permet quelque chose comme "si la chaîne a contient la chaîne b"? Je n'ai trouvé aucune notion de sous-chaîne dans la référence tcsh.

Merci mille fois!

+0

Lien obligatoire: [Programmation Csh considérée comme dangereuse] (http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot). –

Répondre

6

Je ne sais pas tsch, mais en regardant l'info cette page (en caractères spéciaux): http://www.tcsh.org/tcsh.html/Filename_substitution.html http://www.cs.duke.edu/csl/docs/csh.html il semble que vous devez entourer vos couleurs avec des accolades:

if ($st =~ {yellow,blue,red,green}) 
+0

Wow, cela fonctionne en effet! J'avais essayé les accolades, mais ce qui me manquait était le "," délimiteur entre les valeurs: -/Tenté d'essayer avec le caractère pipe. Très apprécié. Merci! – MadMacs

5

Le chose sur le côté droit de l'opérateur ~= est un "glob-pattern", pas une expression régulière. (Par exemple, dans une expression rationnelle . correspond à tout caractère, et .* correspond à zéro ou plusieurs caractères arbitraires, les équivalents motif générique sont ? et *.)

{...,...,...} fait partie de la syntaxe de glob-modèles. man tcsh pour une description complète.

Si vous devez associer une expression régulière, vous pouvez utiliser la commande expr; man expr ou info expr pour plus de détails.

Questions connexes