Updated 2015-02-17 05:50:04 by pooryorick

append appends strings to the value stored in a variable.

Synopsis  edit

append varName ?value value value ...?

Documentation  edit

official reference

Description  edit

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  edit

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  edit

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 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.