2011-01-06 2 views
2

Я изо всех сил пытается использовать краткое изложение сравнения, чтобы избежать кучу «если а = Ь или а = с или а = d или а = е» и т.д.строки/подстроки, соответствующие в Tcsh

Вместо этого я пытаюсь использовать регулярное выражение и сопоставление шаблонов, как в Perl.

с

набор й = "красный"

линия

если ($ й = ~ желтый | синий | красный | зеленый)

просто не работает (если: Синтаксис выражений.) Я пробовал с цитатой s, скобки, но я никогда не получаю ожидаемого результата, если нет ошибки.

есть способ, чтобы избежать тяжелой конструкции:

если ($ й == желтый) || ($ st == синий) || ($ st == red) || ($ st == зеленый)?

Или другой способ задать тот же вопрос: разрешает ли tcsh что-то вроде «если строка a содержит строку b»? Я не мог найти никакого понятия подстроки в tcsh-ссылке.

Спасибо, миллион!

+0

Обязательная ссылка: [Программирование Csh считается вредным] (http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot). –

ответ

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}) 
+0

Вау, это работает! Я попробовал фигурные скобки, но то, что мне не хватало, было «,» разделителем между значениями: -/Удерживал попытку с характером трубы. Большое значение. Благодаря! – MadMacs

5

вещь с правой стороны оператора ~= является «glob-образцом», не регулярное выражение. (Например, в регулярном выражении . соответствует любому символу, а .* соответствует нулю или более произвольных символов, то Глоб-модели эквиваленты ? и *.)

{...,...,...} является частью синтаксиса Глоб-моделей. man tcsh для подробного описания.

Если вам нужно соответствовать регулярному выражению, вы можете использовать команду expr; man expr или info expr для деталей.

Смежные вопросы