'''`[http://www.tcl.tk/man/tcl/TclCmd/append.htm%|%append]`''' appends strings to the value stored in a variable. ** Synopsis ** : '''append''' ''varName'' ?''value value value ...''? ** Documentation ** [http://www.tcl.tk/man/tcl/TclCmd/append.htm%|%official reference]: ** Description ** Appends each ''value'' to the value stored in the variable named by ''varName''. If ''varName'' doesn't exist, it is given a value equal to the concatenation of all the ''value'' arguments. This command provides an efficient way to build up long variables incrementally. For example, `append a $b` is much more efficient than `set a $a$b`, if `$a` is long. `append` is a ''string'' command. When working with lists, definitely use `[concat]` or `[lappend]`. ** Examples ** Building a string of comma-separated numbers piecemeal using a loop. ====== set var 0 for {set i 1} {$i <= 10} {incr i} { append var "," $i } puts $var # Prints 0,1,2,3,4,5,6,7,8,9,10 ====== ** See Also ** [string]: more string functions [concat]: concatenate values. [lappend]: append a [word] to a list <> ---- Is the result of an append of two lists a list as you might expect it? (EE: No. The result of an append of two lists is a ''string'', which, if it can form a valid list, will shimmer into list form next time it is treated as one.) ====== set a [list a b c] set b [list 1 2 3] append a $b puts $a ====== The third word in this new list is not `c`, but `c1`. Does anyone know if there are cases where an append would result in something '''not''' a list? ---- Here's an example of such a case: ====== set l1 [list a {b c}] set l2 [list {d e} f] append l1 $l2 llength $l1 ====== [RS]: The intended functionality seems to me to be closer to `[concat]`. But if you wish to use `append`, just add an extra space to separate the parts: ====== append l1 { } $l2 ====== ---- [AMG]: Single-argument `append` works just like single-argument `[set]`: it returns the value of the named variable. This isn't normally useful, but it might come in handy if the `[{*}]` expansion operator is used to produce the argument list. If the variable doesn't exist, `append` dies with the same error that `set` would in the same situation. This is the only time `append` will complain about the variable not existing, since it's normally a [Dangers of creative writing%|%creative writer]. If the variable exists but is an array, once again single-argument `append` gives the same error as `set`, complaining about its inability to "read" it, once again showing single-argument `append` and `set` to be identical. The rest of the time, the errors given by `append` complain about not being able to "set" the variable. ---- [AMG]: `append` can be used in a one-liner to initialize a variable's value to empty string if it doesn't exist. ====== append var {} ====== In the above code, if `$var` doesn't exist, it is created and the value set to the [empty string]. If it does exist, its value will be left unchanged. According to `tcl::unsupported::[representation]`, no [shimmering] is induced. <> <> Tcl syntax help | Arts and crafts of Tcl-tk programming | Command