Go to the next section.
A simple command is a sequence of optional parameter assignments followed by blank-separated words, with optional redirections interspersed. The first word is the command to be executed, and the remaining words, if any, are arguments to the command. If a command name is given, the parameter assignments modify the environment of the command when it is executed. The value of a simple command is its exit status, or 128 plus the signal number if terminated by a signal.þ þ þ þ
If a simple command is preceded by the word exec
, it is executed
in the parent shell without forking. If preceded by command
, the
command word is taken to be the name of an external command, rather than
a shell function or builtin. If preceded by noglob
, filename
generation is not performed on any of the words. If preceded by a
-
, the command is executed with a -
prepended to its
argv[0]
string. If preceded by nocorrect
, spelling
correction is not done on any of the words.þ
A pipeline is a sequence of one or more commands separated by
|
or |&
. |&
is shorthand for 2>&1 |
. The
standard output of each command is connected to the standard input of
the next command in the pipeline.þ
The value of a pipeline is the value of the last command. If a pipeline
is preceded by a !
, the value of that pipeline is the logical NOT
of the value of the last command.þ
þ
If a pipeline is preceded by coproc
, it is executed as a
coprocess; a two-way pipe is established between it and the parent
shell. The shell can read from or write to the coprocess by means of
the >&p
and <&p
redirection operators.þ
A sublist is a sequence of one or more pipelines separated by
&&
or ||
. If two pipelines are separated by &&
,
the second pipeline is executed only if the first is successful (returns
a zero value). If two pipelines are separated by ||
, the second
is executed only if the first is unsuccessful (returns a nonzero
value). Both operators have equal precedence and are left
associative.þ
A list is a sequence of one or more sublists separated by, and
optionally terminated by, ;
, &
, or a newline. Normally
the shell waits for each list to finish before executing the next one.
If a list is terminated by a &
, the shell executes it in the
background, and does not wait for it to finish.
A complex command is one of the following:
for name [ in word ... ]
do list
done
in
word
is omitted, use the positional parameters instead of the
words.
for name [ in word ... ] ; sublist
for
. Though it may cause confusion, it
is included for convenience; its use in scripts is discouraged, unless
sublist is a command of the form { list }.þ
foreach name ( word ... )
list
end
for
.
for name in word ...
{
list
}
for
.
for name ( word ... ) {
list
}
for
; this requires the option
CSH_JUNKIE_PAREN
.
for name ( word ... ) sublist
for
; this also requires
CSH_JUNKIE_PAREN
.þ
þ
þ
select name [ in word ... ]
do list
done
in word
is omitted, use the positional parameters. The
PROMPT3
prompt is printed and a line is read from standard input.
If this line consists of the number of one of the listed words,
then the parameter name is set to the word corresponding to
this number. If this line is empty, the selection list is printed
again. Otherwise, the value of the parameter name is set to null.
The contents of the line read from standard input is saved in the
parameter REPLY
. list is executed for each selection until
a break or end-of-file is encountered.
select name [ in word ] ; sublist
select
.
þ
þ
þ
case word in [ pattern ) list ;; ] ... esac
case word { [ pattern ) list ;; ] ... }
case
.
þ
þ
if list
then list
[ elif list ; then list ] ...
[ else list ]
fi
if list
is executed, and, if it returns a zero exit
status, the then list
is executed. Otherwise, the
elif list
is executed and, if its value is zero, the
then list
is executed. If each elif list
returns nonzero, the else list
is executed.
if ( list ) sublist
if
; this requires the option
CSH_JUNKIE_PAREN
.
if ( list ) {
list
} elif ( list ) {
list
} ... else {
list
}
if
. The parentheses surrounding list
can be omitted if the only command in the list is a conditional
expression of the form [[ exp ]]
. See section Conditional Expressions. This form also requires CSH_JUNKIE_PAREN
.þ
þ
þ
while list
do list
done
do list
as long as the while list
returns a zero exit status.
while ( list ) {
list
}
while
; this requires the option
CSH_JUNKIE_PAREN
.þ
þ
þ
until list
do list
done
do list
as long as the until list
returns a nonzero exit status.þ
þ
þ
repeat word
do list
done
repeat word sublist
repeat
.
þ
( list )
{ list }
function word [ () ] ... { list }
word ... () { list }
word ... () sublist
{
and }
.
See section Functions.þ
time [ pipeline ]
TIMEFMT
parameter. If pipeline is omitted, print statistics about the
shell process and its children.þ
[[ exp ]]
The following words are recognized as reserved words when used as
the first word of a command unless quoted or removed using the
unalias
builtin:
do
done
esac
then
elif
else
fi
for
case
if
while
function
repeat
time
until
exec
command
select
coproc
noglob
-
nocorrect
foreach
end
In noninteractive shells, or in interactive shells with the
INTERACTIVE_COMMENTS
option set, a word beginning with the third
character of the HISTCHARS
parameter (#
by default) causes
that word and all the following characters up to a newline to be
ignored.
Every token in the shell input is checked to see if there is an alias
defined for it. If so, it is replaced by the text of the alias if it is
in command position (if it could be the first word of a simple command),
or if the alias is global. If the text ends with a space, the next word
in the shell input is treated as though it were in command position for
purposes of alias expansion. An alias is defined using the alias
builtin; global aliases may be defined using the -g
option to
that builtin.
Alias substitution is done on the shell input before any other substitution except history substitution. Therefore, if an alias is defined for the word `foo', alias substitution may be avoided by quoting part of the word, e.g. `\foo'. But there is nothing to prevent an alias being defined for `\foo' as well.
A character may be quoted (that is, made to stand for itself) by
preceding it with a \
. \
followed by a newline is
ignored. All characters enclosed between a pair of single quotes
("
) are quoted, except the first character of HISTCHARS
(!
by default). A single quote cannot appear within single
quotes. Inside double quotes (""
), parameter and command
substitution occurs, and \
quotes the characters \
,
`
, "
, and $
.
Go to the next section.