1

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

1 ответ1

1

Здесь происходит 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 это не {braces} "quotes" }, а не "кавычки" .

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

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

expect -ex {blah blah [herp derp]}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .