在不添加 space 的情况下,继续在 TCL 中多行定义字符串

Continue the definition of a string over multiple lines in TCL without adding a space

我想在 tcl 中定义一个变量 filePath,以包含文件的路径。但是,文件路径很长,导致该行超过 80 个字符。当我使用反斜杠继续该行时,tcl 会自动将 space 添加到我不需要的字符串中。目前,我的定义是

set filePath "documents/school/2016/homework/ECE102/assignment_2/setupfiles/contantDefinitions"

但是当我尝试

set filePath "documents/school/2016/homework/ECE102/assignment_2/\
        setupfiles/contantDefinitions"

tcl 将分配文件路径 "documents/school/2016/homework/ECE102/assignment_2/ setupfiles/contantDefinitions"

如何在不添加 space 的情况下将其拆分为多行?

你可以这样做:

set filePath [file join documents/school/2016/homework/ECE102/assignment_2/\
    setupfiles/contantDefinitions]

将路径的各个部分放在一起时,首选 file join 命令,但只要第一部分末尾有斜杠,append 就可以:

append filePath documents/school/2016/homework/ECE102/assignment_2/\
    setupfiles/contantDefinitions

只需确保 filePath 在此调用之前为空或不存在。

如果想避免续行:

set filePath documents/school/2016/homework/ECE102/assignment_2/
set filePath [file join $filePath setupfiles/contantDefinitions]

set filePath documents/school/2016/homework/ECE102/assignment_2/
append filePath setupfiles/contantDefinitions

Tcl 解释器对 80 多个字符的行没有问题,分解定义的唯一原因是它看起来更整洁and/or行长度是一组编码指南的一部分。

(拥有最新版本Tcl的人可以像上面使用file join一样使用string cat。)

文档:append, file, set, string

您可以将零件放在大括号中形成一个列表,然后将零件拼接起来

set filePath [join {
    documents/school/2016/homework/ECE102/assignment_2/
    setupfiles/contantDefinitions
} ""]

我刚刚遇到了与原始问题中描述的相同的问题;尽管建议了解决方法,但 none 的回复解决了额外 space 的问题。即使当我在第二行的第一个字符中开始一个长字符串的延续文本时,Tcl 仍然在连接点向字符串添加 space。 Don Libes(在他的《Exploring Expect》一书中,第 33 页)建议 "a backslash-newline-whitespace sequence is replaced by a single space"。 Tcl(无论如何至少是 v8.6)也将用单个 space 替换反斜杠换行符。即使原始规范说它应该这样做,但这对这个新人来说似乎非常违反直觉!