使用tcl split解决`list element in braces with "]" instead of space`导致`unmatched open brace in list`
Using tcl split to solve `list element in braces followed by "]" instead of space` causes `unmatched open brace in list`
(这是来自 nagelfar 插件——它是一个用 tcl 编写的 tcl 分析器,这就是 $x
包含 tcl 代码的原因。)
在 tcl 中 shell:
% set x {proc {::$p} args {[subst { foo }]} }
proc {::$p} args {[subst { foo }]}
%
% lindex $x 3 0
list element in braces followed by "]" instead of space
根据 http://forum.egghelp.org/viewtopic.php?t=2603 解决方案是使用 split
,但是:
% lindex [split $x] 3 0
unmatched open brace in list
对内容如上$x
的变量使用lindex
的正确方法是什么?
原始字符串$x
可以像一个简单的列表一样处理...
% set x {proc {::$p} args {[subst { foo }]} }
% foreach item $x { puts $item}
proc
::$p
args
[subst { foo }]
...但不是列表列表。 [subst { foo }]
格式不正确,无法成为列表。
% lindex $x 3 0
Error: list element in braces followed by "]" instead of space
Use error_info for more info. (CMD-013)
如果一个字符串可以用白色 space 分隔并且可以选择使用引号或大括号进行分组,则可以将其视为 list in Tcl。字符串 [subst { foo }]
的最后一个白色 space 分隔部分是 }]
。这可以防止第一个 {
字符形成分组匹配。
对于这个特定的字符串,您可以先从 $x
中获取第 4 个项目,然后使用 split
获取第一个项目。
% lindex [split [lindex $x 3]] 0
[subst
在一般情况下,您可以在每次出现 }
后插入一个 space。
% set y [regsub -all "\}" $x "\} "]
proc {::$p} args {[subst { foo } ]}
% lindex $y 3 0
[subst
(这是来自 nagelfar 插件——它是一个用 tcl 编写的 tcl 分析器,这就是 $x
包含 tcl 代码的原因。)
在 tcl 中 shell:
% set x {proc {::$p} args {[subst { foo }]} }
proc {::$p} args {[subst { foo }]}
%
% lindex $x 3 0
list element in braces followed by "]" instead of space
根据 http://forum.egghelp.org/viewtopic.php?t=2603 解决方案是使用 split
,但是:
% lindex [split $x] 3 0
unmatched open brace in list
对内容如上$x
的变量使用lindex
的正确方法是什么?
原始字符串$x
可以像一个简单的列表一样处理...
% set x {proc {::$p} args {[subst { foo }]} }
% foreach item $x { puts $item}
proc
::$p
args
[subst { foo }]
...但不是列表列表。 [subst { foo }]
格式不正确,无法成为列表。
% lindex $x 3 0
Error: list element in braces followed by "]" instead of space
Use error_info for more info. (CMD-013)
如果一个字符串可以用白色 space 分隔并且可以选择使用引号或大括号进行分组,则可以将其视为 list in Tcl。字符串 [subst { foo }]
的最后一个白色 space 分隔部分是 }]
。这可以防止第一个 {
字符形成分组匹配。
对于这个特定的字符串,您可以先从 $x
中获取第 4 个项目,然后使用 split
获取第一个项目。
% lindex [split [lindex $x 3]] 0
[subst
在一般情况下,您可以在每次出现 }
后插入一个 space。
% set y [regsub -all "\}" $x "\} "]
proc {::$p} args {[subst { foo } ]}
% lindex $y 3 0
[subst