2011-01-06 11 views
2

ich bin zu kämpfen versuchen, eine prägnante Vergleich Aussage zu verwenden, um eine Reihe von "wenn a = b oder a = c oder a = d oder a = e", etc. zu vermeidenStrings/Strings in tcsh passend

Stattdessen versuche ich, Regex und Mustervergleich wie in Perl zu verwenden.

mit

set st = "red"

die Linie

if ($ st = ~ gelb | blau | rot | grün)

funktioniert einfach nicht (wenn: Ausdruckssyntax.) Ich versuchte mit Zitat s, Klammer, aber ich bekomme nie das erwartete Ergebnis, wenn kein Fehler.

ist es eine Möglichkeit, das schwere Konstrukt zu vermeiden:

if ($ st == gelb) || ($ st == blau) || ($ st == rot) || ($ st == grün)?

Oder eine andere Möglichkeit, die gleiche Frage zu stellen: Erlaubt tcsh etwas wie "wenn String a String b enthält"? Ich konnte keine Idee von Teilstrings in Tcsh-Referenz finden.

Danke eine Million!

+0

Obligatorischer Link: [Csh-Programmierung als schädlich angesehen] (http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot). –

Antwort

6

Ich weiß tsch nicht, aber diese Seite am Info suchen (unter Sonderzeichen): http://www.tcsh.org/tcsh.html/Filename_substitution.html http://www.cs.duke.edu/csl/docs/csh.html scheint es, dass Sie Ihre Farben mit Klammern umgeben benötigen:

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

Wow, das funktioniert in der Tat! Ich hatte die geschweiften Klammern versucht, aber was ich vermisste war das "," Trennzeichen zwischen den Werten: -/Keep versucht mit dem Pipe-Zeichen. Sehr geschätzt. Vielen Dank! – MadMacs

5

Der Sache auf der rechten Seite des ~= Betreibers ist ein "glob-pattern", nicht ein regulärer Ausdruck. (Zum Beispiel, in einem regulären Ausdruck . jedes Zeichen und .* entspricht null oder mehr beliebige Zeichen, das glob-Muster Äquivalente ist ? und *.)

{...,...,...} Teil der Syntax von glob-Muster ist. man tcsh für eine vollständige Beschreibung.

Wenn Sie einen regulären Ausdruck verwenden müssen, können Sie den Befehl expr verwenden; man expr oder info expr für Details.