我正在努力尝试使用简洁的比较语句来避免一堆“如果a = b或a = c或a = d或a = e”等等。
相反,我正试图像在perl中那样使用正则表达式和模式匹配。
与
设置st =“red”
行
if($ st = ~yellow | blue | red | green)
只是不起作用(如果:表达式语法。) 我尝试使用引号,括号,但如果没有错误,我永远不会得到预期的结果。
有没有办法避免沉重的构造:
if($ st == yellow)|| ($ st == blue)|| ($ st == red)|| ($ st == green)?
或者提出同样问题的另一种方式:tcsh是否允许类似“如果字符串a包含字符串b”?我在tcsh引用中找不到任何子字符串的概念。
万分感谢!
答案 0 :(得分:6)
我不知道tsch,但查看此页面的信息(在特殊字符下): http://www.tcsh.org/tcsh.html/Filename_substitution.html
http://www.cs.duke.edu/csl/docs/csh.html
看来你需要用大括号包围你的颜色:
if ($st =~ {yellow,blue,red,green})
答案 1 :(得分:5)
~=
运算符右侧的东西是“glob-pattern”,不是正则表达式。 (例如,在正则表达式.
匹配任何字符,.*
匹配零个或多个任意字符; glob-pattern等效项为?
和*
。)
{...,...,...}
是glob-patterns语法的一部分。 man tcsh
有完整说明。
如果需要匹配正则表达式,可以使用expr
命令; man expr
或info expr
了解详情。