错误或功能?在Tcl中缺少结束引用很少被视为在语法上不正确.

use*_*428 1 tcl

我用Tcl 8.3和8.5尝试了它:声明

puts X"
Run Code Online (Sandbox Code Playgroud)

在语法上是正确的,只输出一个X和一个双引号.我原以为,Tcl抱怨缺少收盘报价.OTOH,如果我输入陈述

puts "X
Run Code Online (Sandbox Code Playgroud)

puts "
Run Code Online (Sandbox Code Playgroud)

在tclsh中,语句尚未执行,但是tcls希望我在下一行继续该字符串.

哪个句法规则隐藏在对我来说看起来像异常的背后?

Ign*_*icz 7

不要认为这是一个错误,如文档中所述:此处参考

[3]字.命令的单词由空格分隔(换行除外,它们是命令分隔符).

[4]双引号.如果单词的第一个字符是双引号("""),则单词由下一个双引号字符终止.如果引号之间出现分号,近括号或空格字符(包括换行符)它们被视为普通字符并包含在单词中.命令替换,变量替换和反斜杠替换是在引号之间的字符上执行的,如下所述.双引号不作为单词的一部分保留.

关键部分是如果一个单词的第一个字符是双引号("""),则该单词由下一个双引号字符终止.

所以在你的情况下,如果单词开头而"不是结束双引号是预期的,如果单词没有开头,那么""被视为单词的一部分而不是作为变量替换语法的特殊内容.