Как уже заметил Донал, именно форматирование значения, удерживаемого переменной text
, не соответствует списку Tcl, что, однако, ожидается [join]
.
Ваши варианты:
1) Превратить значение в список Tcl с помощью [split]
:
join [split $text] \n
2) Избегатьпреобразование в список и [join]
в целом с помощью [string map]
:
string map {" " "\n"} $text
(или используйте [regsub]
, как показано ниже, если вы не можете контролировать распространение пустого пространства вваш ввод)
Иногда строка лучше оставаться просто строкой;)
Varia
Использование [regsub]
проблематично, прежде всего, лучше использовать его один раз, чтобы получитьваша конечная цель, а не санация входной строки перед вызовом [join]
:
regsub -all {\s+} $text "\n"
Background
Вы сталкиваетесь с ошибками, потому что вы не экранируете часовой {
в регулярном выражении({)
до [regsub]
правильно:
regsub -all -- ({) $text {\{} text
Это должно быть:
regsub -all -- {\{} $text {\{} text
В вашем варианте {
считается открывающей скобкой, которая на самом деле не соответствуетв оставшейся части сценария.