我用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希望我在下一行继续该字符串.
哪个句法规则隐藏在对我来说看起来像异常的背后?
不要认为这是一个错误,如文档中所述:此处参考
[3]字.命令的单词由空格分隔(换行除外,它们是命令分隔符).
[4]双引号.如果单词的第一个字符是双引号("""),则单词由下一个双引号字符终止.如果引号之间出现分号,近括号或空格字符(包括换行符)它们被视为普通字符并包含在单词中.命令替换,变量替换和反斜杠替换是在引号之间的字符上执行的,如下所述.双引号不作为单词的一部分保留.
关键部分是如果一个单词的第一个字符是双引号("""),则该单词由下一个双引号字符终止.
所以在你的情况下,如果单词开头而"不是结束双引号是预期的,如果单词没有开头,那么"这"被视为单词的一部分而不是作为变量替换语法的特殊内容.