Updated 2014-02-14 01:39:16 by AMG


append - Append strings to variable


append varName ?value value value ...?


This Tcl command appends all of the value arguments to the current value of variable 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.




other string functions: string

similar functions for lists: concat, lappend


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

NOTE: The append command is a string command. If you want to play with lists, definitely use the concat or lappend commands

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

Note that the third element of 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 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 will be created with value set to empty string. If it does exist, its value will be left unchanged. According to [tcl::unsupported::representation], no shimmering is induced.