---
name: "set"
section: "n"
platform: "macos"
package: "tcl"
version: "152"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/set/n"
---

# set(n)

Read and write variables

## NAME

set - Read and write variables

## SYNOPSIS

**set** *varName* ?*value*?

## DESCRIPTION

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

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 *varName* was declared to resolve differently through one of the  **global**, **variable** or **upvar** commands.

## EXAMPLES

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 ALSO

[expr(n)](/expr/n.md), [global(n)](/global/n.md), [namespace(n)](/namespace/n.md), [proc(n)](/proc/n.md), [trace(n)](/trace/n.md), [unset(n)](/unset/n.md), [upvar(n)](/upvar/n.md), [variable(n)](/variable/n.md)

## KEYWORDS

read, write, variable
