我在我的 TCL 代码中处理一个列表(只有一个元素),当我用 puts 打印出来时,我看到文本有时用大括号括起来。例如:{abc} 有时不是。这会导致问题,因为我正在对这个特定文本执行 regsub 并且大括号导致我的代码失败。我还观察到,当文本中有特殊符号时,列表会用大括号括起来。任何人都可以解释为什么列表括在大括号中。
当 Tcl 从单个值创建一个列表时,它尝试使用尽可能少的引用。如果它是一个简单的值,如abc,则省略所有引用字符。如果它是一个包含像空格这样的元语法字符的值 ( abc def),则将其括在大括号 ( {abc def}) 中。如果它是在 ( abc{def) 中带有不平衡大括号的值,则使用反斜杠 ( abc\{def)。这确保了 Tcl 创建的列表也总是可以理解为包含单个命令的脚本,该命令的单词恰好是列表的元素。
regexp在列表上使用不是一个好主意;该格式对于这类工作并不是很友好(当您考虑可以解析为列表的所有内容时,情况会更糟,这比 Tcl 实际从list命令中生成的要多得多)。提取元素(例如,使用lindex或foreach)并对其应用正则表达式。