为什么后缀“\n”在TCL/expect 脚本中添加双引号?

why does suffixing "\n" add the double quotes in TCL/expect script?

代码:

exp_send $pass"\n"

发送传递变量值后跟双引号,换行符然后是双引号。

我想知道为什么?

如果我不想发送双引号,应该如何编码?

这是由于 Tcl 的 general syntax rules。特别是," 字符仅在单词的开头(或在 {*} 之后,此处不适用)才特殊。当它不在单词的开头(和匹配的结尾)时,它一点也不特别。

这意味着在:

exp_send $pass"\n"

第二个单词由 pass 变量、一个文字 "、一个换行符和另一个文字 " 的内容串联而成。 只是规则的应用。

要修复,您可以使用其中之一:

exp_send "$pass\n"
exp_send $pass\n
exp_send $pass "\n"

第三个与另外两个不同;它为 exp_send 提供了两个参数,而不是一个。前两个选项在行为上是相同的,并且在内部编译为相同的字节码序列。