соответствие строк / подстрок в tcsh - PullRequest
2 голосов
/ 06 января 2011

Я изо всех сил пытаюсь использовать краткий оператор сравнения, чтобы избежать группы "если a = b или a = c или a = d или a = e" и т. Д.

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

с

set st = "red"

строка

if ($ st = ~ yellow | blue | red | green)

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

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

if ($ st == yellow) ||($ st == синий) ||($ st == красный) ||($ st == green)?

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

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

Ответы [ 2 ]

6 голосов
/ 06 января 2011

Я не знаю 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})
5 голосов
/ 31 июля 2011

Правая часть оператора ~= - это "шаблон глобуса", , а не - регулярное выражение.(Например, в регулярном выражении . соответствует любому символу, а .* соответствует нулю или большему количеству произвольных символов; эквивалентами шаблонов глобуса являются ? и *.)

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

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

...