2005-09-20 21:31:55 +08:00
|
|
|
\section switch switch - conditionally execute a block of commands
|
|
|
|
|
|
|
|
\subsection switch-synopsis Synopsis
|
2006-09-19 22:52:03 +08:00
|
|
|
<tt>switch VALUE; [case [WILDCARD...]; [COMMANDS...]; ...] end</tt>
|
2005-09-20 21:31:55 +08:00
|
|
|
|
|
|
|
\subsection switch-description Description
|
|
|
|
|
|
|
|
The \c switch statement is used to perform one of several blocks of
|
|
|
|
commands depending on whether a specified value equals one of several
|
2006-04-21 16:35:29 +08:00
|
|
|
wildcarded values. The \c case statement is used together with the \c
|
|
|
|
switch statement in order to determine which block should be
|
|
|
|
performed.
|
|
|
|
|
|
|
|
Each \c case command is given one or more parameter. The first \c case
|
|
|
|
command with a parameter that matches the string specified in the
|
|
|
|
switch command will be evaluated. \c case parameters may contain
|
|
|
|
wildcards. These need to be escaped or quoted in order to avoid
|
|
|
|
regular wildcard expansion using filenames.
|
|
|
|
|
|
|
|
Note that fish does not fall through on case statements. Though the
|
|
|
|
syntax may look a bit like C switch statements, it behaves more like
|
2007-08-02 01:35:24 +08:00
|
|
|
the case statements of traditional shells.
|
2005-09-20 21:31:55 +08:00
|
|
|
|
2006-09-19 22:52:03 +08:00
|
|
|
Also note that command substitutions in a case statement will be
|
|
|
|
evaluated even if it's body is not taken. This may seem
|
|
|
|
counterintuitive at first, but it is unavoidable, since it would be
|
|
|
|
impossible to know if a case command will evaluate to true before all
|
|
|
|
forms of parameter expansion have been performed for the case command.
|
|
|
|
|
2005-09-20 21:31:55 +08:00
|
|
|
\subsection switch-example Example
|
|
|
|
|
2006-09-19 22:52:03 +08:00
|
|
|
If the variable \$animal contains the name of an animal, the following
|
|
|
|
code would attempt to classify it:
|
2005-09-20 21:31:55 +08:00
|
|
|
|
|
|
|
<pre>
|
|
|
|
switch $animal
|
|
|
|
case cat
|
|
|
|
echo evil
|
|
|
|
case wolf dog human moose dolphin whale
|
|
|
|
echo mammal
|
2006-01-24 07:17:06 +08:00
|
|
|
case duck goose albatross
|
2005-09-20 21:31:55 +08:00
|
|
|
echo bird
|
|
|
|
case shark trout stingray
|
|
|
|
echo fish
|
2006-04-21 16:35:29 +08:00
|
|
|
case '*'
|
|
|
|
echo I have no idea what a $animal is
|
2005-09-20 21:31:55 +08:00
|
|
|
end
|
|
|
|
</pre>
|
|
|
|
|
2006-04-21 16:35:29 +08:00
|
|
|
If the above code was run with \c \$animal set to \c whale, the output
|
2006-01-24 07:17:06 +08:00
|
|
|
would be \c mammal.
|
2005-09-20 21:31:55 +08:00
|
|
|
|