2015-06-27 41 views
1

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

exp_send $pass"\n" 

发送通变量值,随后双引号,换行符然后双引号。

我想知道为什么?

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

+4

在Tcl中,如果双引号出现在单词的开头和结尾,则只有双引号“quote”。它们比普通文本更特别,但在您的调用中,引号将成为传输文本的一部分。如果你只是省略双引号,你应该得到你想要的 - 或者不必要的,你可以将第一个引号字符移到美元符号之前。 –

+0

这听起来正确。谢谢! – paolov

+0

你能链接到一个例子吗?这偶尔会引起混淆,所以我可能会写一个稍后讨论它的答案。 (我不知道那里发生了什么,我回答了一条评论,似乎不再在这里了)。 –

回答

3

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

这意味着,在:

exp_send $pass"\n" 

第二个字包括的pass变量,文字",换行,而另一个字面"的内容的并置的。它的只是规则的应用。

要解决,您可以使用其中的一个:

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

;三是其他两个不同的;它给了exp_send两个参数,而不是一个。前两个选项在行为上相同,并在内部编译为相同的字节码序列。

+0

不幸的是,第三个错误是:'exp_send'只需要(-flags和)一个字符串 –

+1

啊,但这会是一个_command-specific_错误,而不是一般的Tcl语法错误。完全不同! ;-) –