.. index::
   single: for (command)

for command
===========

Synopis
-------

::

    for <variable> in <items>; do <commands>; done

Description
-----------

The for command is used to loop over a list of values and execute a series of
commands for each of these.

The counter variable of the loop is a shell variable. Please, keep in mind that
an environment variable takes precedence over a shell variable of the same name.

variable
    name of the counter variable

items
    space separated item list

commands
    commands to execute

Example
-------

::

    => setenv c
    => for c in 1 2 3; do echo item ${c}; done
    item 1
    item 2
    item 3
    => echo ${c}
    3
    => setenv c x
    => for c in 1 2 3; do echo item ${c}; done
    item x
    item x
    item x
    =>

The first line ensures that there is no environment variable *c*. Hence in the
first loop the shell variable *c* is printed.

After defining an environment variable of name *c* it takes precedence over the
shell variable and the environment variable is printed.

Return value
------------

The return value $? after the done statement is the return value of the last
statement executed in the loop.

::

    => for i in true false; do ${i}; done; echo $?
    1
    => for i in false true; do ${i}; done; echo $?
    0
