ulis: If, for some syntax analyzis, you need to know the level of nested braces inside a list, here is a tiny proc that do that. It returns 0 for "this is a list", 1 for "{this is a list}" or "this {is a} list", and so on. ---- proc listlevel {text} { set len [llength [split $text]] for {set count 0} {$len!=[set len [llength $text]]} {incr count} { # Used to be [eval concat $text] but this is safer set text [eval [linsert $text 0 concat]] } return $count } ---- Results: set text "this is a list" puts "$text: [listlevel $text]" -> this is a list: 0 set text {this is a list} puts "$text: [listlevel $text]" -> this is a list: 0 set text [list this is a list] puts "$text: [listlevel $text]" -> this is a list: 0 set text [list "this is a list"] puts "$text: [listlevel $text]" -> {this is a list}: 1 set text {{this is a} list} puts "$text: [listlevel $text]" -> {this is a} list: 1 set text {{this {is a}} list} puts "$text: [listlevel $text]" -> {this {is a}} list: 2 ---- Tcl makes no difference between "this is a list" and [[list this is a list]] so I gave them the 0 level. You can need to differentiate empty strings, one word strings and multi words strings before nested lists.