mirror of
https://github.com/fish-shell/fish-shell
synced 2024-11-10 15:14:44 +00:00
38b24c2325
This makes it so we link to the very top of the document instead of a special anchor we manually include. So clicking e.g. :doc:`string <cmds/string>` will link you to cmds/string.html instead of cmds/string.html#cmd-string. I would love to have a way to say "this document from the root of the document path", but that doesn't appear to work, I tried `/cmds/string`. So we'll just have to use cmds/string in normal documents and plain `string` from other commands.
50 lines
1.6 KiB
ReStructuredText
50 lines
1.6 KiB
ReStructuredText
.. _cmd-for:
|
|
|
|
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.
|