Какие символы требуют экранирования в ожидаемых строках?

1016
mcandre

Я знаю, что жесткие скобки [, ]требуют тройных обратной косые черт вытекающих при использовании внутри expect "..."строк, поэтому я использую, expect "blah blah \\\[herp derp\\\]"чтобы точно передать эти символы в expectI / O проверки, но что другие персонажи также требует экранирование? Труба? Скобки? ???

1
`wait` использует Tcl для своих сценариев, поэтому я предполагаю, что экранировать должны те же символы, что и в обычном Tcl. mtak 6 лет назад 0

1 ответ на вопрос

1
glenn jackman

Здесь происходит 2 вещи:

  1. Tcl использует в [...]качестве синтаксиса «подстановка команд» (см. Https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm rule 7). Это похоже на обратную галочку в сценарии оболочки. В двойных кавычках выполняются подстановки команд.

  2. Соответствие шаблону по умолчанию для expectкоманды - это «глобальные» шаблоны. Шаблоны глобусов описаны здесь: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 Квадратные скобки специально предназначены для шаблонов глобусов.

Итак, сначала вам нужно защитить квадратные скобки в двойных кавычках, чтобы предотвратить подстановку команд. Затем, если вы хотите относиться к ним как к буквальным символам, вам нужно снова их избежать.

Вот несколько вещей, которые вы можете сделать, чтобы уменьшить обратную косую черту:

  1. используйте не интерполирующие кавычки: в Tcl это не так "quotes".

  2. выберите другой тип шаблона: если это буквальная строка, которую вы хотите сопоставить, используйте -exопцию, чтобы сказать, что вы хотите «точное» соответствие.

Таким образом, вы хотите это:

expect -ex 

Похожие вопросы