我知道在字符串中使用硬括号[
时]
需要三重反斜杠转义expect "..."
,因此我使用expect "blah blah \\\[herp derp\\\]"
它来准确地将这些字符传达给expect
I/O 检查器,但还有哪些其他字符也需要转义? 管道? 括号? ???
答案1
这里发生了两件事:
Tcl 使用
[...]
“命令替换”语法(参见https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm规则 7)。它类似于 shell 脚本中的反引号。在双引号内,执行命令替换。该命令的默认模式匹配
expect
是“glob”模式。glob 模式的文档如下: https://tcl.tk/man/tcl8.6/TclCmd/string.htm#M35 方括号对于 glob 模式来说是特殊的。
因此,首先需要保护双引号内的方括号,以防止命令替换。然后,如果您想将它们视为文字字符,则需要再次对其进行转义。
您可以通过以下几种方式来减少反斜杠:
使用非插值引号:在 Tcl 中
{braces}
不是"quotes"
。选择不同的模式类型:如果这是您想要匹配的文字字符串,请使用选项
-ex
表示您想要“精确”匹配。
因此,你想要这个:
expect -ex {blah blah [herp derp]}