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

# for(n)

'For' loop

## NAME

for - 'For' loop

## SYNOPSIS

**for** *start test next body*

## DESCRIPTION

**For** is a looping command, similar in structure to the C **for** statement.  The *start*, *next*, and *body* arguments must be Tcl command strings, and *test* is an expression string. The **for** command first invokes the Tcl interpreter to execute *start*.  Then it repeatedly evaluates *test* as an expression; if the result is non-zero it invokes the Tcl interpreter on *body*, then invokes the Tcl interpreter on *next*, then repeats the loop.  The command terminates when *test* evaluates to 0.  If a **continue** command is invoked within *body* then any remaining commands in the current execution of *body* are skipped; processing continues by invoking the Tcl interpreter on *next*, then evaluating *test*, and so on.  If a **break** command is invoked within *body* or *next*, then the **for** command will return immediately. The operation of **break** and **continue** are similar to the corresponding statements in C. **For** returns an empty string.

Note: *test* should almost always be enclosed in braces.  If not, variable substitutions will be made before the **for** command starts executing, which means that variable changes made by the loop body will not be considered in the expression. This is likely to result in an infinite loop.  If *test* is enclosed in braces, variable substitutions are delayed until the expression is evaluated (before each loop iteration), so changes in the variables will be visible. See below for an example:

## EXAMPLES

Print a line for each of the integers from 0 to 10: for {set x 0} {$x\<10} {incr x} {\
    puts "x is $x" }

Either loop infinitely or not at all because the expression being evaluated is actually the constant, or even generate an error!  The actual behaviour will depend on whether the variable *x* exists before the **for** command is run and whether its value is a value that is less than or greater than/equal to ten, and this is because the expression will be substituted before the **for** command is executed. for {set x 0} $x\<10 {incr x} {\
    puts "x is $x" }

Print out the powers of two from 1 to 1024: for {set x 1} {$x\<=1024} {set x \[expr {$x \* 2}\]} {\
    puts "x is $x" }

## SEE ALSO

break, continue, foreach, while

## KEYWORDS

for, iteration, looping
