的代码:为什么后缀“ n”在TCL/expect脚本中添加双引号?
exp_send $pass"\n"
发送通变量值,随后双引号,换行符然后双引号。
我想知道为什么?
如果我不想要双引号发送,它应该如何编码?
的代码:为什么后缀“ n”在TCL/expect脚本中添加双引号?
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
两个参数,而不是一个。前两个选项在行为上相同,并在内部编译为相同的字节码序列。
不幸的是,第三个错误是:'exp_send'只需要(-flags和)一个字符串 –
啊,但这会是一个_command-specific_错误,而不是一般的Tcl语法错误。完全不同! ;-) –
在Tcl中,如果双引号出现在单词的开头和结尾,则只有双引号“quote”。它们比普通文本更特别,但在您的调用中,引号将成为传输文本的一部分。如果你只是省略双引号,你应该得到你想要的 - 或者不必要的,你可以将第一个引号字符移到美元符号之前。 –
这听起来正确。谢谢! – paolov
你能链接到一个例子吗?这偶尔会引起混淆,所以我可能会写一个稍后讨论它的答案。 (我不知道那里发生了什么,我回答了一条评论,似乎不再在这里了)。 –