Files
fish-shell/doc_src/cmds/for.rst
Johannes Altmanninger 7a59540517 docs: use :doc: role when referencing entire pages
No need to define "cmd-foo" anchors; use :doc:`foo <cmds/foo>`
instead. If we want "cmd-foo" but it should be tested.

See also 38b24c2325 (docs: Use :doc: role when linking to commands,
2022-09-23).
2025-11-06 12:58:59 +01:00

49 lines
1.6 KiB
ReStructuredText

for - perform a set of commands multiple times
==============================================
Synopsis
--------
.. synopsis::
for VARNAME in [VALUES ...]; COMMANDS ...; end
Description
-----------
**for** is a loop construct. It will perform the commands specified by *COMMANDS* multiple times. On each iteration, the local variable specified by *VARNAME* is assigned a new value from *VALUES*. If *VALUES* is empty, *COMMANDS* will not be executed at all. The *VARNAME* is visible when the loop terminates and will contain the last value assigned to it. If *VARNAME* does not already exist it will be set in the local scope. For our purposes if the **for** block is inside a function there must be a local variable with the same name. If the **for** block is not nested inside a function then global and universal variables of the same name will be used if they exist.
Much like :doc:`set <set>`, **for** does not modify $status, but the evaluation of its subordinate commands can.
The **-h** or **--help** option displays help about using this command.
Example
-------
::
for i in foo bar baz; echo $i; end
# would output:
foo
bar
baz
Notes
-----
The ``VARNAME`` was local to the for block in releases prior to 3.0.0. This means that if you did something like this:
::
for var in a b c
if break_from_loop
break
end
end
echo $var
The last value assigned to ``var`` when the loop terminated would not be available outside the loop. What ``echo $var`` would write depended on what it was set to before the loop was run. Likely nothing.