预期字符串中哪些字符需要转义?

预期字符串中哪些字符需要转义?

我知道在字符串中使用硬括号[]需要三重反斜杠转义expect "...",因此我使用expect "blah blah \\\[herp derp\\\]"它来准确地将这些字符传达给expectI/O 检查器,但还有哪些其他字符也需要转义? 管道? 括号? ???

答案1

这里发生了两件事:

  1. Tcl 使用[...]“命令替换”语法(参见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm规则 7)。它类似于 shell 脚本中的反引号。在双引号内,执行命令替换。

  2. 该命令的默认模式匹配expect是“glob”模式。glob 模式的文档如下: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 方括号对于 glob 模式来说是特殊的。

因此,首先需要保护双引号内的方括号,以防止命令替换。然后,如果您想将它们视为文字字符,则需要再次对其进行转义。

您可以通过以下几种方式来减少反斜杠:

  1. 使用非插值引号:在 Tcl 中{braces}不是"quotes"

  2. 选择不同的模式类型:如果这是您想要匹配的文字字符串,请使用选项-ex表示您想要“精确”匹配。

因此,你想要这个:

expect -ex {blah blah [herp derp]}

相关内容