Я знаю, что жесткие скобки [, ]требуют тройных обратной косые черт вытекающих при использовании внутри expect "..."строк, поэтому я использую, expect "blah blah \\\[herp derp\\\]"чтобы точно передать эти символы в expectI / O проверки, но что другие персонажи также требует экранирование? Труба? Скобки? ???
Какие символы требуют экранирования в ожидаемых строках?
1 ответ
Здесь происходит 2 вещи:
Tcl использует в
[...]качестве синтаксиса «подстановка команд» (см. Https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm rule 7). Это похоже на обратную галочку в сценарии оболочки. В двойных кавычках выполняются подстановки команд.Соответствие шаблону по умолчанию для
expectкоманды - это «глобальные» шаблоны. Шаблоны глобусов описаны здесь: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 Квадратные скобки специально предназначены для шаблонов глобусов.
Итак, сначала вам нужно защитить квадратные скобки в двойных кавычках, чтобы предотвратить подстановку команд. Затем, если вы хотите относиться к ним как к буквальным символам, вам нужно снова их избежать.
Вот несколько вещей, которые вы можете сделать, чтобы уменьшить обратную косую черту:
используйте не интерполирующие кавычки: в Tcl это
не так"quotes".выберите другой тип шаблона: если это буквальная строка, которую вы хотите сопоставить, используйте
-exопцию, чтобы сказать, что вы хотите «точное» соответствие.
Таким образом, вы хотите это:
expect -ex
waitиспользует Tcl для своих сценариев, поэтому я предполагаю, что экранировать должны те же символы, что и в обычном Tcl.