Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Wednesday, February 9, 2022

set (1t)


set - Read and write variables


set varName ?value?


set(1t)                      Tcl Built-In Commands                     set(1t)


       set - Read and write variables

       set varName ?value?

       Returns the value of variable varName.  If value is specified, then set
       the value of varName to value, creating a new variable if one does  not
       already  exist,  and  return  its  value.   If varName contains an open
       parenthesis and ends with a close parenthesis, then  it  refers  to  an
       array  element:   the  characters before the first open parenthesis are
       the name of the array, and the characters between the  parentheses  are
       the index within the array.  Otherwise varName refers to a scalar vari-

       If varName includes namespace qualifiers  (in  the  array  name  if  it
       refers  to  an  array  element), or if varName is unqualified (does not
       include the names of any containing namespaces)  but  no  procedure  is
       active,  varName  refers  to a namespace variable resolved according to
       the rules described under NAME RESOLUTION in the namespace manual page.

       If a procedure is active  and  varName  is  unqualified,  then  varName
       refers  to  a parameter or local variable of the procedure, unless var-
       Name was declared to resolve differently through  one  of  the  global,
       variable or upvar commands.

       Store a random number in the variable r:

              set r [expr {rand()}]

       Store a short message in an array element:

              set anAry(msg) "Hello, World!"

       Store a short message in an array element specified by a variable:

              set elemName "msg"
              set anAry($elemName) "Hello, World!"

       Copy a value into the variable out from a variable whose name is stored
       in the vbl (note that it is often easier  to  use  arrays  in  practice
       instead of doing double-dereferencing):

              set in0 "small random"
              set in1 "large random"
              set vbl in[expr {rand() >= 0.5}]
              set out [set $vbl]

       See attributes(7) for descriptions of the following attributes:

       |Availability   | runtime/tcl-8    |
       |Stability      | Uncommitted      |

       expr(n),   global(n),   namespace(n),   proc(n),   trace(n),  unset(n),
       upvar(n), variable(n)

       read, write, variable

       Source code for open source software components in Oracle  Solaris  can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-

       This    software    was    built    from    source     available     at
       https://github.com/oracle/solaris-userland.    The  original  community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.

Tcl                                                                    set(1t)