在tcsh中匹配的字符串/子字符串

时间:2011-01-06 00:46:09

标签: string comparison substring tcsh

我正在努力尝试使用简洁的比较语句来避免一堆“如果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引用中找不到任何子字符串的概念。

万分感谢!

2 个答案:

答案 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 exprinfo expr了解详情。