Я знаю , что жесткие скобки [
требуют тройных обратной косых черт вытекающих при использовании внутри expect "..."
строки, поэтому я использую ожидать „ли - expect "blah blah \\\[herp derp\\\]"
, чтобы точно передать эти символы в I expect
/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 это не
{braces}
"quotes"
}, а не "кавычки" .выберите другой тип шаблона: если это буквальная строка, которую вы хотите сопоставить, используйте опцию
-ex
чтобы сказать, что вы хотите "точное" соответствие.
Таким образом, вы хотите это:
expect -ex {blah blah [herp derp]}