Tcl 中带换行符的字符串文字

String literal with line breaks in Tcl

我想在我的源代码中有一个由多行组成的字符串(即包含 LF 字符)。

解决方案应该:

  1. 将每个数据行放在单独的源代码行中。
    # Bad:
    set lines "line 1\nline 2\nline 3"
    
  2. 不添加空的前导或尾随行:
    # Bad:
    set lines {
    line 1
    line 2
    line 3
    }
    puts [split $lines \n]
    # Prints: {} {line 1} {line 2} {line 3} {}
    
  3. 没有挂线:
    # Bad:
    set lines {line 1
    line 2
    line 3}
    

到目前为止我想到了什么:

set lines {
line 1
line 2
line 3
}
set lines [string range $lines 1 end-1]

有没有更好的方法?

怎么样:

% set lines [join [list {*}{
   "line 1"
   "line 2"
   "line 3"
}] \n]
% split $lines \n
{line 1} {line 2} {line 3}

我最终选择了选项 2,并通过 string trim

删除了开头和结尾的空行
set lines {
line 1
line 2
line 3
}
set lines [string trim $lines]
puts [split $lines \n]

打印:

{line 1} {line 2} {line 3}

Try it online!