shell
SH(1) USER COMMANDS SH(1)
SH(1) USER COMMANDS SH(1)
NAME
sh, rsh - shell, the
standard/restricted command and programming language
SYNOPSIS
sh
[
±abcefhikmnoprstuvxCD
] [
-R
file ] [
±o
option ] . . . [
-
] [ arg . . . ]
rsh
[
±abcefhikmnoprstuvxCD
] [
-R
file ] [
±o
option ] . . . [
-
] [ arg . . . ]
TABLE OF CONTENTS
Definitions.
Commands.
Variable Assignments.
Comments.
Aliasing.
Tilde Substitution.
Command Substitution.
Arithmetic Substitution.
Process Substitution.
Parameter Expansion.
Field Splitting.
File Name Generation.
Quoting.
Arithmetic Evaluation.
Prompting.
Conditional Expressions.
Input/Output.
Environment.
Functions.
Discipline Functions.
Jobs.
Signals.
Execution.
Command Re-entry.
In-line Editing Options.
Key Bindings.
Emacs Editing Mode.
Vi Editing Mode.
Built-in Commands.
Invocation.
DESCRIPTION
Sh
is a command and programming language
that executes commands read from a terminal
or a file.
Rsh
is a restricted version of the
standard
command interpreter
sh;
it is used to set up login names and execution environments whose
capabilities are more controlled than those of the standard shell.
See
Invocation
below
for the meaning of arguments to the shell.
Definitions.
A
metacharacter
is one of the following characters:
; & ( ) | < > new-line space tab
A
blank
is a
tab
or a
space.
An
identifier
is a sequence of letters, digits, or underscores
starting with a letter or underscore.
Identifiers are used as components of
variable
names.
A
vname
is a sequence of one or more identifiers
separated by a . and optionally preceded
by a ..
Vnames are used as function and variable names.
A
word
is a sequence of
characters
from the character set defined by the current locale,
excluding non-quoted
metacharacters.
A
command
is a sequence of characters in the syntax
of the shell language.
The shell reads each command and
carries out the desired action either directly or by invoking
separate utilities.
A built-in command is a command that is carried out by the
shell itself without creating a separate process.
Some commands are built-in purely for convenience
and are not documented here.
Built-ins that cause
side effects in the shell environment and
built-ins that are found before performing a
path search (see
Execution
below)
are documented here.
For historical reasons, some of
these built-ins behave differently than
other built-ins and are called
special built-ins.
Commands.
A
simple-command
is a list of variable assignments
(see
VariableAssignments
below)
or a sequence of
blank
separated words
which may be preceded by a list of variable assignments
(see
Environment
below).
The first word specifies the name of the command to
be executed.
Except as specified below,
the remaining words are passed as arguments
to the invoked command.
The command name is passed as argument 0
(see
exec(2)).
The
value
of a simple-command is its exit status; 0-255
if it terminates normally; 256+signum if
it terminates abnormally (the name of the signal corresponding
to the exit status can be
obtained via the
-l
option of the
kill
built-in utility).
A
pipeline
is a sequence of one or more
commands
separated by
|.
The standard output of each command but the last
is connected by a
pipe(2)
to the standard input of the next command.
Each command,
except possibly the last,
is run as a separate process;
the shell waits for the last command to terminate.
The exit status of a pipeline is the exit
status of the last command.
Each pipeline can be preceded by the
reserved word
!
which causes the exit status of the pipeline to become
0 if the exit status of the last command is non-zero, and
1 if the exit status of the last command is 0.
A
list
is a sequence of one or more
pipelines
separated by
;,
&,
|&,
&&,
or
| |,
and optionally terminated by
;,
&,
or
|&.
Of these five symbols,
;,
&,
and
|&
have equal precedence,
which is lower than that of
&&
and
| |.
The symbols
&&
and
| |
also have equal precedence.
A semicolon
(;)
causes sequential execution of the preceding pipeline; an ampersand
(&)
causes asynchronous execution of the preceding pipeline (i.e., the shell does
not
wait for that pipeline to finish).
The symbol
|&
causes asynchronous execution of the preceding pipeline
with a two-way pipe established to the parent shell;
the standard input and output of the spawned pipeline
can be written to and read from by the parent shell
by applying
the redirection operators
<&
and
>&
with arg
p
to commands and by using
-p
option of
the built-in commands
read
and
print
described later.
The symbol
&&
( | | )
causes the
list
following it to be executed only if the preceding
pipeline
returns a zero (non-zero) value.
One or more new-lines may appear in a
list
instead of a semicolon,
to delimit a command.
A
command
is either a simple-command
or one of the following.
Unless otherwise stated,
the value returned by a command is that of the
last simple-command executed in the command.
for vname [ in word . . . ] ;do list ;done
Each time a
for
command is executed,
vname
is set to the next
word
taken from the
in
word
list.
If
in word
. . .
is omitted, then
the
for
command executes the do list once for each positional parameter
that is set starting from
1
(see
ParameterExpansion
below).
Execution ends when there are no more words in the list.
for (( [ expr1 ] ; [ expr2 ] ; [ expr3 ] )) ;do list ;done
The arithmetic expression
expr1
is evaluated first
(see
ArithmeticEvaluation
below).
The arithmetic expression
expr2
is repeatedly evaluated until it evaluates to zero and when non-zero,
list
is executed and the arithmetic expression
expr3
evaluated.
If any expression
is omitted, then it behaves as if it evaluated to 1.
select vname [ in word . . . ] ;do list ;done
A
select
command prints on standard error (file descriptor 2) the set of
words,
each preceded by a number.
If
in word
. . .
is omitted, then
the
positional parameters starting from
1
are used instead
(see
ParameterExpansion
below).
The
PS3
prompt is printed
and a line is read from the standard input.
If this line consists of the number
of one of the listed
words,
then the value of the variable
vname
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 variable
vname
is set to
null.
The contents of the line read from standard input is
saved in
the variable
REPLY.
The
list
is executed for each selection until a
break
or
end-of-file
is encountered.
If the
REPLY
variable is set to
null
by the execution of
list,
then the selection list is printed before
displaying the
PS3
prompt for the next selection.
case word in [ [ ( ]pattern [ | pattern ] . . . ) list ;; ] . . . esac
A
case
command executes the
list
associated with the first
pattern
that matches
word.
The form of the patterns is
the same as that used for
file-name generation (see
FileNameGeneration
below).
The
;;
operator causes execution of
case
to terminate.
If
;&
is used in place of
;;
the next subsequent list, if any, is executed.
if list ;then list [ elif list ;then list ] . . . [ ;else list ] ;fi
The
list
following if is executed and,
if it
returns a zero exit status, the
list
following
the first
then
is executed.
Otherwise, the
list
following elif
is executed and, if its value is zero,
the
list
following
the next
then
is executed.
Failing each successive
elif
list ,
the
else
list
is executed.
If the
if
list
has non-zero exit status
and there is no
else
list,
then the
if
command returns a zero exit status.
while list ;do list ;done
until list ;do list ;done
A
while
command repeatedly executes the
while
list
and, if the exit status of the last command in the list is zero, executes
the
do
list;
otherwise the loop terminates.
If no commands in the
do
list
are executed, then the
while
command returns a zero exit status;
until
may be used in place of
while
to negate
the loop termination test.
((expression ))
The
expression
is evaluated using the rules for arithmetic evaluation described below.
If the value of the arithmetic expression is non-zero, the exit
status is 0, otherwise the exit status is 1.
(list )
Execute
list
in a separate environment.
Note, that if two adjacent open parentheses are
needed for nesting, a space must be inserted to avoid
evaluation as an arithmetic command as described above.
{ list ;}
list
is simply executed.
Note that unlike the metacharacters
(
and
),
{
and
}
are
reserved words
and must occur
at the beginning of a line or after a
;
in order to be recognized.
[[ expression ]]
Evaluates
expression
and returns a zero exit status when
expression
is true.
See
ConditionalExpressions
below, for a description of
expression.
function varname { list ;}
varname () { list ;}
Define a function which is referenced by
varname.
A function whose
varname
contains a
.
is called a discipline function and the portion
of the
varname
preceding the last
.
must refer to an existing variable.
The body of the function is the
list
of commands between
{
and
}.
A function defined with the function varname
syntax can also be used as an argument to the .
special built-in command to get the equivalent behavior
as if the varname () syntax were used to define it.
(See
Functions
below.)
time [ pipeline ]
If pipeline is omitted the user and system time for
the current shell and completed child processes is printed
on standard error.
Otherwise,
pipeline
is executed and the elapsed time as well as
the user and system time are printed on standard error.
The following reserved words
are recognized as reserved only when they are the first word of a command
and are not quoted:
if then else elif fi case esac for while until do done { } function select time [[ ]] !
Variable Assignments.
One or more variable assignments can start a simple command
or can be arguments to the
typeset,
export,
or
readonly
special built-in commands.
The syntax for an assignment is of the form:
varname =word
varname [word ]=word
No space is permitted between varname and the = or
between = and word .
varname =(assign_list )
No space is permitted between varname and the =.
An assign_list can be one of the following:
word ...
Indexed array assignment.
[word ]=word . . .
Associative array assignment.
assignment . . .
Nested variable assignment.
typeset [ options ] assignment . . .
Nested variable assignment. Multiple assignments
can be specified by separating each of them with a ;.
Comments.
A word beginning with
#
causes that word and all the following characters up to a new-line
to be ignored.
Aliasing.
The first word of each command is replaced by the text of an
alias
if an
alias
for this word has been defined.
An
alias
name consists of any number of characters excluding metacharacters,
quoting characters,
file expansion characters,
parameter expansion and command substitution
characters,
and
=.
The replacement string can contain any
valid shell script
including the metacharacters listed above.
The first word of each command in the
replaced text,
other than
any that are in the process of being replaced,
will be tested for aliases.
If the last character of the alias value is a
blank
then the word following the alias will also be checked for alias
substitution.
Aliases can be used to redefine
built-in commands but cannot be used to redefine
the reserved words listed above.
Aliases can be created and listed with the
alias
command and can be removed with the
unalias
command.
Aliasing
is performed when
scripts are read,
not while they are executed.
Therefore,
for an alias to take effect,
the
alias
definition command has to be executed before
the command which references the alias is read.
The following aliases
are compiled into the shell
but can be unset or redefined:
autoload='typeset -fu'
command='command '
fc=hist
float='typeset -E'
functions='typeset -f'
hash='alias -t - -'
history='hist -l'
integer='typeset -i'
nameref='typeset -n'
nohup='nohup '
r='hist -s'
redirect='command exec'
stop='kill -s STOP'
suspend='kill -s STOP $$'
times='{ { time;} 2>&1;}'
type='whence -v'
Tilde Substitution.
After alias substitution is performed, each word
is checked to see if it begins with an unquoted
~.
For tilde substitution,
word
also refers to the
word
portion of parameter expansion
(see
ParameterExpansion
below).
If it does, then the word up to a
/
is checked to see if it matches a user name in the
password database (often the
/etc/passwd
file).
If a match is found, the
~
and the matched login name are replaced by the
login directory of the matched user.
If no match is found, the original text is left unchanged.
A
~
by itself, or in front of a
/,
is replaced by
$HOME.
A
~
followed by a
+
or
-
is replaced by the value of
$PWD
and
$OLDPWD
respectively.
In addition,
when expanding a
variable assignment,
tilde
substitution is attempted when
the value of the assignment
begins with a
~,
and when a
~
appears after a
:.
The
:
also terminates a
~
login name.
Command Substitution.
The standard output from a command enclosed in
parentheses preceded by a dollar sign (
$( )
)
or a pair of grave accents ( ` ` )
may be used as part or all
of a word;
trailing new-lines are removed.
In the second (obsolete) form, the string between the quotes is processed
for special quoting characters before the command is executed (see
Quoting
below).
The command substitution
$( cat file )
can be replaced by the equivalent but faster
$( (list )
will run process
list
asynchronously connected to some file in
/dev/fd.
The name of this file will become the argument to the command.
If the form with
>
is selected then writing on this file will provide input for
list.
If
<
is used,
then the file passed as an argument will contain the output of the
list
process.
For example,
paste <(cut -f1 file1) <(cut -f3 file2) | tee >(process1) >(process2)
cuts
fields 1 and 3 from
the files
file1
and
file2
respectively,
pastes
the results together, and
sends it
to the processes
process1
and
process2,
as well as putting it onto the standard output.
Note that the file, which is passed as an argument to the command,
is a UNIX
pipe(2)
so programs that expect to
lseek(2)
on the file will not work.
Parameter Expansion.
A
parameter
is a
variable,
one or more digits,
or any of the characters
*,
@,
#,
?,
-,
$,
and
!\ .
A
variable
is denoted by a vname.
To create a variable whose
vname
contains a .,
a variable whose
vname
consists of everything before the last . must already exist.
A
variable
has a
value
and zero or more
attributes.
Variables
can be assigned
values
and
attributes
by using the
typeset
special built-in command.
The attributes supported by the shell are described
later with the
typeset
special built-in command.
Exported variables pass values and attributes to
the environment.
The shell supports both indexed and associative arrays.
An element of an array variable is referenced by a
subscript.
A
subscript
for an indexed array is denoted by
an
arithmeticexpression
(see
ArithmeticEvaluation
below)
between a
[
and a
].
To assign values to an indexed array, use
set -A vname value . . . .
The value of all
subscripts must be in the
range of
0 through 4095.
Indexed arrays need not be declared.
Any reference to a variable
with a valid subscript is
legal and an array will be created if necessary.
An associative array is created with the
-A
option to
typeset.
A
subscript
for an associative array is denoted by
a string enclosed between
[
and
].
Referencing any array without a subscript
is equivalent to referencing the array with subscript 0.
The
value
of a
variable
may be assigned by writing:
vname=value
[
vname=value
] . . .
or
vname[subscript]=value
[
vname[subscript]=value
] . . .
Note that no space is allowed before or after the
=.
A
nameref
is a variable that is a reference to another variable.
A nameref is created with the
-n
attribute of
typeset.
The value of the variable at the time of the
typeset
command becomes the variable that will be referenced whenever
the nameref variable is used.
The name of a nameref cannot contain a ..
When a variable or function name contains a ., and the portion
of the name up to the first . matches the
name of a nameref, the variable referred to is obtained by
replacing the nameref portion with the name of the variable
referenced by the nameref.
A nameref provides a convenient way to refer to the variable
inside a function whose name is passed as an argument to a function.
For example, if the name of a variable is passed as the first
argument to a function, the command
typeset -n var=$1
inside the function causes references and assignments to
var
to be references and assignments to the variable whose
name has been passed to the function.
If either of the floating point attributes,
-E,
or
-F,
or the integer attribute,
-i,
is set for
vname,
then the
value
is subject to arithmetic evaluation as described below.
Positional parameters,
parameters denoted by a number,
may be assigned values with the
set
special built-in command.
Parameter
$0
is set from argument zero when the shell
is invoked.
The character
$
is used to introduce substitutable
parameters.
${parameter }
The shell
reads all the characters from
${
to the matching
}
as part of the same word even if it contains
braces or metacharacters.
The value, if any, of the parameter is substituted.
The braces are required when
parameter
is followed by a letter, digit, or underscore
that is not to be interpreted as part of its name,
when the variable name contains a .,
or when a variable is subscripted.
If
parameter
is one or more digits then it is a positional parameter.
A positional parameter of more than one digit must be
enclosed in braces.
If
parameter
is
*
or
@,
then all the positional
parameters, starting with
$1,
are substituted
(separated by a field separator character).
If an array
vname
with subscript
*
or
@
is used,
then the value
for each of the
elements
is substituted,
separated by
the first character of
the value of
IFS.
${#parameter }
If
parameter
is
*
or
@,
the number of positional parameters is substituted.
Otherwise, the length of the value of the
parameter
is substituted.
${#vname[*]}
${#vname[@]}
The number of elements in the array
vname
is substituted.
${!vname }
Expands to the name of the variable referred to by
vname.
This will be
vname
except when
vname
is a name reference.
${!vname [subscript ]}
Expands to name of the subscript unless
subscript
is
*
or
@.
When
subscript
is
*,
the list of array subscripts for vname
is generated.
For a variable that is not an array, the value is 0 if the variable
is set. Otherwise it is null.
When
subscript
is
@,
same as above, except that when used in double quotes,
each array subscript yields a separate
argument.
${!prefix *}
Expands to the names of the variables whose names begin with
prefix.
${parameter :-word }
If
parameter
is set and is non-null then substitute its value;
otherwise substitute
word.
${parameter :=word }
If
parameter
is not set or is null then set it to
word;
the value of the parameter is then substituted.
Positional parameters may not be assigned to
in this way.
${parameter :?word }
If
parameter
is set and is non-null then substitute its value;
otherwise, print
word
and exit from the shell (if not interactive).
If
word
is omitted then a standard message is printed.
${parameter :+word }
If
parameter
is set and is non-null then substitute
word;
otherwise substitute nothing.
${parameter :offset :length }
${parameter :offset }
Expands to the portion of the value of
parameter
starting at the character (counting from
0 )
determined by expanding
offset
as an arithmetic expression and consisting of the
number of characters determined by the arithmetic expression
defined by
length.
In the second form, the remainder of the value is used.
If
parameter
is
*
or
@,
or is an array name indexed by
*
or
@,
then
offset
and
length
refer to the array index and number
of elements respectively.
${parameter #pattern }
${parameter ##pattern }
If
the shell
pattern
matches the beginning of the value of
parameter,
then the value of
this expansion is the value of the
parameter
with the matched portion deleted;
otherwise the value of this
parameter
is substituted.
In the first form the smallest matching pattern is deleted and in the
second form the largest matching pattern is deleted.
When
parameter
is
@,
*,
or an array variable with subscript
@
or
*,
the substring operation is applied to each element in turn.
${parameter %pattern }
${parameter %%pattern }
If
the shell
pattern
matches the end of the value of
parameter,
then the value of
this expansion is the value of the
parameter
with the matched part deleted;
otherwise substitute the value of
parameter.
In the first form the smallest matching pattern is deleted and in the
second form the largest matching pattern is deleted.
When
parameter
is
@,
*,
or an array variable with subscript
@
or
*,
the substring operation is applied to each element in turn.
${parameter /pattern /string }
${parameter //pattern /string }
${parameter /#pattern /string }
${parameter /%pattern /string }
Expands
parameter
and replaces the longest match of
pattern
with the given
string.
Each occurrence of \n in
string
is replaced by the portion of parameter
that matches the n -th sub-pattern.
In the first form,
only the first occurrence of
pattern
is replaced.
In the second form,
each match for
pattern
is replaced by the given
string.
The third form restricts the pattern match to the beginning of the string
while the fourth form restricts the pattern match to the end of
the string.
When
string
is null, the
pattern
will be deleted and the
/
in front of
string
may be omitted.
When
parameter
is
@,
*,
or an array variable with subscript
@
or
*,
the substitution operation is applied to each element in turn.
In the above,
word
is not evaluated unless it is
to be used as the substituted string,
so that, in the following example,
pwd
is executed only if
d
is not set or is null:
print ${d:- $( pwd ) }
If the colon (
:)
is omitted from the above expressions,
then the shell only checks whether
parameter
is set or not.
The following
parameters
are automatically set by the shell:
#
The number of positional parameters in decimal.
-
Options supplied to the shell on invocation or by
the
set
command.
?
The decimal value returned by the last executed command.
$
The process number of this shell.
_
Initially, the value of
_
is an absolute pathname of the shell or script being executed
as passed in the
environment.
Subsequently it is assigned the last argument of the previous command.
This parameter is not set for commands which are asynchronous.
This parameter is also used to hold the name of the matching
MAIL
file when checking for mail.
!
The process number of the last background command invoked.
.sh.edchar
This variable contains the value of the keyboard character
(or sequence of characters if the first character is an ESC, ascii
033 )
that has
been entered when processing a
KEYBD
trap
(see
KeyBindings
below).
If the value is changed as part of the trap action, then the new
value replaces the key (or key sequence) that caused the trap.
.sh.edcol
The character position of the cursor at the time of the most recent
KEYBD
trap.
.sh.edmode
The value is set to ESC when processing a
KEYBD
trap while in
vi
insert mode. (See
ViEditingMode
below.)
Otherwise,
.sh.edmode
is null when processing a
KEYBD
trap.
.sh.edtext
The characters in the input buffer at the time of the most recent
KEYBD
trap.
The value is null when not processing a
KEYBD
trap.
.sh.name
Set to the name of the variable at the time that a
discipline function is invoked.
.sh.subscript
Set to the name subscript of the variable at the time that a
discipline function is invoked.
.sh.value
Set to the value of the variable at the time that the
set
discipline function is invoked.
.sh.version
Set to a value that identifies the version of this shell.
LINENO
The current line number within the script or
function being executed.
OLDPWD
The previous working directory set by the
cd
command.
OPTARG
The value of the last option argument processed by the
getopts
built-in command.
OPTIND
The index of the last option argument processed by the
getopts
built-in command.
PPID
The process number of the parent of the shell.
PWD
The present working directory set by the
cd
command.
RANDOM
Each time this variable is referenced, a random integer,
uniformly distributed between 0 and 32767, is generated.
The sequence of random numbers can be initialized by assigning
a numeric value to
RANDOM.
REPLY
This variable is set by the
select
statement and by
the
read
built-in command when no arguments are supplied.
SECONDS
Each time this variable is referenced, the number of
seconds since shell invocation is returned.
If this variable is
assigned a value, then the value returned upon reference will
be the value that was assigned plus the number of seconds since the assignment.
The following
variables
are used by the shell:
CDPATH
The search path for the
cd
command.
COLUMNS
If this variable is set,
the value is used to define the width of the edit window
for the shell edit modes and for printing
select
lists.
EDITOR
If the value of this variable ends in
emacs,
gmacs,
or
vi
and the
VISUAL
variable is not set,
then the corresponding option
(see special built-in command
set
below)
will be turned on.
ENV
If this variable is set, then
parameter expansion, command substitution, and arithmetic substitution
are performed on
the value to generate
the pathname of the script that will be
executed when the shell
is invoked
(see
Invocation
below).
This file is typically used for
alias
and
function
definitions.
FCEDIT
Obsolete name for
the default editor name for the
hist
command.
FCEDIT
is not used when
HISTEDIT
is set.
FIGNORE
A pattern that defines the set of filenames that will be
ignored when performing filename matching.
FPATH
The search path for function definitions.
This path is searched for a file with the same name
as the function or command when a function with the
-u
attribute is referenced and when a command is not found.
If an executable file with the name of that command is found,
then it is read and executed
in the current environment.
HISTCMD
Number of the current command in the history file.
HISTEDIT
Name for
the default editor name for the
hist
command.
HISTFILE
If this variable is set when the shell is invoked, then
the value is the pathname of the file that will be
used to store the command history (see
CommandRe-entry
below).
HISTSIZE
If this variable is set when the shell is invoked, then
the number of previously entered commands that
are accessible by this shell
will be greater than or equal to this number.
The default is 128.
HOME
The default argument (home directory) for the
cd
command.
IFS
Internal field separators,
normally
space,
tab,
and
new-line
that are used to separate the results of
command substitution or parameter expansion
and to separate fields with the built-in command
read.
The first character of the
IFS
variable is used to separate arguments for the
"$*"
substitution (see
Quoting
below).
Each single occurrence of
an
IFS
character in the string to be split,
that is not in the isspace character class, and any
adjacent characters in
IFS
that are in the isspace character class, delimit a field.
One or more
characters in
IFS
that belong to the isspace character class,
delimit a field.
In addition, if the same isspace character appears
consecutively inside
IFS,
this character is treated as if it were not in the isspace
class, so that if
IFS
consists of two
tab
characters,
then two adjacent
tab
characters delimit a null field.
LANG
This variable determines the locale category for any
category not specifically selected with a variable
starting with
LC_
or
LANG.
LC_ALL
This variable overrides the value of the
LANG
variable and any other
LC_
variable.
LC_COLLATE
This variable determines the locale category for character
collation information.
LC_CTYPE
This variable determines the locale category for character
handling functions.
It determines the character classes for pattern matching (see
FileNameGeneration
below).
LC_NUMERIC
This variable determines the locale category for the
decimal point character.
LINES
If this variable is set,
the value is used to determine the column length for printing
select
lists.
Select lists will print vertically until about two-thirds of
LINES
lines are filled.
MAIL
If this variable is set to the name of a mail file
and
the
MAILPATH
variable is not set,
then the shell informs the user of arrival of mail
in the specified file.
MAILCHECK
This variable specifies how often (in seconds) the
shell will check for changes in the modification time
of any of the files specified by the
MAILPATH
or
MAIL
variables.
The default value is 600 seconds.
When the time has elapsed
the shell will check before issuing the next prompt.
MAILPATH
A colon (
:
)
separated list of file names.
If this variable is set,
then the shell informs the user of
any modifications to the specified files
that have occurred within the last
MAILCHECK
seconds.
Each file name can be followed by a
?
and a message that will be printed.
The message will undergo parameter expansion, command substitution,
and arithmetic substitution
with the variable
$_
defined as the name of the file that has changed.
The default message is
youhavemailin$_ .
PATH
The search path for commands (see
Execution
below).
The user may not change
PATH
if executing under
rsh
(except in
.profile ).
PS1
The value of this variable is expanded for parameter
expansion, command substitution, and arithmetic substitution to define the
primary prompt string which by default is
``$ ''.
The character
!
in the primary prompt string is replaced by the
command
number (see
CommandRe-entry
below).
Two successive occurrences of
!
will produce a single
!
when the prompt string is printed.
PS2
Secondary prompt string, by default
``> ''.
PS3
Selection prompt string
used within a
select
loop, by default
``#? ''.
PS4
The value of this variable is expanded for parameter evaluation,
command substitution, and arithmetic substitution
and precedes each line of an execution trace.
By default,
PS4
is
``+ ''.
In addition
when
PS4
is unset,
the execution trace prompt is also
``+ ''.
SHELL
The pathname of the
shell
is kept in the environment.
At invocation, if the basename of this variable is
rsh,
rksh,
or
krsh,
then the shell becomes restricted.
TMOUT
If set to a value greater than zero,
TMOUT
will be the default timeout value for the
read
built-in command.
The
select
compound command terminates after
TMOUT
seconds when input is from a terminal.
Otherwise,
the shell will terminate if a line is not entered within
the prescribed number of seconds while reading from a terminal.
(Note that the shell can be compiled with a maximum bound
for this value which cannot be exceeded.)
VISUAL
If the value of this variable ends in
emacs,
gmacs,
or
vi
then the corresponding option
(see Special Command
set
below)
will be turned on.
The value of
VISUAL
overrides the value of
EDITOR.
The shell gives default values to
PATH, PS1, PS2,
PS3, PS4, MAILCHECK, FCEDIT,
TMOUT and IFS,
while
HOME,
SHELL,
ENV,
and
MAIL
are
not set at all by the shell (although
HOME
is
set by
login(1)).
On some systems
MAIL
and
SHELL
are also
set by
login(1).
Field Splitting.
After parameter expansion and command substitution,
the results of substitutions are scanned for the field separator
characters (those found in
IFS
)
and split into distinct fields where such characters are found.
Explicit null fields ( " " or ' ' ) are retained.
Implicit null fields
(those resulting from
parameters
that have no values or command substitutions with no output) are removed.
File Name Generation.
Following splitting, each field is scanned for the characters
*,
?,
(,
and
[
unless the
-f
option has been set.
If one of these characters appears,
then the word is regarded as a
pattern.
Each file name component that contains any pattern character
is replaced with a lexicographically sorted set of names
that matches the pattern
from
that directory.
If no file name is found that matches the pattern, then
that component of the filename is left unchanged.
If
FIGNORE
is set,
then each file name component
that matches the pattern defined by the value of
FIGNORE
is ignored when generating the matching filenames.
The names
.
and
..
are also ignored.
If
FIGNORE
is not set,
the character
.
at the start of each file name component
will be ignored unless the first character of the pattern
corresponding to this component is the character
.
itself.
Note, that for other
uses of pattern matching the
/
and
.
are not treated specially.
*
Matches any string, including the null string.
?
Matches any single character.
[ . . . ]
Matches any one of the enclosed characters.
A pair of characters separated by
-
matches any
character lexically between the pair, inclusive.
If the first character following the opening
[
is a
!
then any character not enclosed is matched.
A
-
can be included in the character set by putting it as the
first or last character.
Within
[
and
] ,
character classes can be specified with the syntax
[:class:]
where class is one of the following classes defined in the ANSI-C standard:
alnum alpha blank cntrl digit graph lower print punct space upper xdigit
Within
[
and
] ,
an equivalence class can be specified with the syntax
[=c=]
which matches all characters with the same primary
collation weight (as defined by the current locale) as
the character c.
Within
[
and
] ,
[.symbol.]
matches the collating symbol symbol.
A
pattern-list
is a list of one or more patterns separated from each other
with a
&
or
|.
A
&
signifies that all patterns must be matched whereas
|
requires that only one pattern be matched.
Composite patterns can be formed with one or more of the following sub-patterns:
?(pattern-list )
Optionally matches any one of the given patterns.
*(pattern-list )
Matches zero or more occurrences of the given patterns.
+(pattern-list )
Matches one or more occurrences of the given patterns.
@(pattern-list )
Matches exactly one of the given patterns.
!(pattern-list )
Matches anything except one of the given patterns.
Each sub-pattern in a composite pattern is numbered,
starting at 1, by the location of the ( within
the pattern.
The sequence \n , where n
is a single digit and \n comes after
the n-th. sub-pattern,
matches the same string as the sub-pattern itself.
Quoting.
Each of the
metacharacters
listed earlier (see
uDefinitions\d
above)
has a special meaning to the shell
and causes termination of a word unless quoted.
A character may be
quoted
(i.e., made to stand for itself)
by preceding
it with a
\.
The pair
\new-line
is removed.
All characters enclosed between a pair of single quote marks
( ' ' )
that is not preceded by a
$
are quoted.
A single quote cannot appear within the single quotes.
A single quoted string preceded by an unquoted
$
is processed as an ANSI-C string
except that
\0
within the string causes the remainder of the
string to be ignored and
\E
is equivalent to the escape character
(ascii
033).
Inside double quote marks
(" "),
parameter and command substitution occur and
\
quotes the characters
\,
`,
",
and
$.
A
$
in front of a double quoted string will be ignored
in the "C" or "POSIX" locale, and may cause
the string to be replaced by a locale specific string otherwise.
The meaning of
$*
and
$@
is identical when not quoted or when used as a variable assignment value
or as a file name.
However, when used as a command argument,
"$*"
is equivalent to
"$1d $2d . . .",
where
d
is the first character of the
IFS
variable, whereas
"$@"
is equivalent to
"$1"
"$2"
. . . .
Inside grave quote marks
(` `),
\
quotes the characters
\,
`,
and
$.
If the grave quotes occur within double quotes, then
\
also quotes the character
".
The special meaning of reserved words or aliases can be removed by quoting any
character of the reserved word.
The recognition of function names or built-in command names listed below
cannot be altered by quoting them.
Arithmetic Evaluation.
The shell performs arithmetic evaluation for
arithmetic substitution, to evaluate an arithmetic command,
to evaluate an indexed array subscript,
and to evaluate arguments to
the built-in commands
shift
and
let.
Evaluations are performed using
double precision floating point
arithmetic.
Floating point constants follow the ANSI-C programming language
conventions.
Integer constants are of the form
[ base# ]n
where
base
is a decimal number between two and sixty-four
representing the arithmetic base
and
n
is a number in that base.
The digits above 9 are represented
by the lower case letters, the upper case letters,
@,
and
_
respectively.
For bases less than or equal to 36, upper and lower case
characters can be used interchangeably.
If
base
is omitted,
then base 10 is used.
An arithmetic expression uses the same syntax, precedence, and
associativity of
expression as the C language.
All the C language operators
that apply to floating point quantities can be used.
In addition, when the value of an arithmetic variable
or sub-expression can be represented as a long integer,
all C language integer arithmetic operations can be performed.
Variables can be referenced by name within an arithmetic expression
without using the parameter expansion syntax.
When a variable is referenced, its value is evaluated as
an arithmetic expression.
The following math library functions can be used with an arithmetic
expression:
abs acos asin atan cos cosh exp int log sin sinh sqrt tan tanh
An internal representation of a
variable
as a double precision floating point can be specified with the
-E [ n ]
or
-F [ n ]
option of the
typeset
special built-in command.
The
-E
option causes the expansion of the value to be represented using
scientific notation when it is expanded.
The optional option argument
n
defines the number of significant figures.
The
-F
option causes the expansion to be represented as a floating decimal number
when it is expanded.
The optional option argument
n
defines the number of places after the decimal point in this case.
An internal integer representation of a
variable
can be specified with the
-i [ n ]
option of the
typeset
special built-in command.
The optional option argument
n
specifies an arithmetic base to be used when expanding the variable.
If you do not specify an arithmetic base,
the first assignment to the
variable determines the arithmetic base.
Arithmetic evaluation is performed on the value of each
assignment to a variable with the
-E,
-F,
or
-i
attribute.
Assigning a floating point number to a
variable whose type is an integer causes the fractional
part to be truncated.
Prompting.
When used interactively,
the shell prompts with the value of
PS1
after expanding it for parameter expansion, command substitution, and
arithmetic substitution,
before reading a command.
In addition, each single
!
in the prompt is replaced by the command number.
A
!!
is required to place
!
in the prompt.
If at any time a new-line is typed and further input is needed
to complete a command, then the secondary prompt
(i.e., the value of
PS2)
is issued.
Conditional Expressions.
A
conditional expression
is used with the
[[
compound command to test attributes of files and to compare
strings.
Field splitting and file name generation are
not performed on the words between
[[
and
]].
Each expression can be constructed from one or more
of the following unary or binary expressions:
string
True, if
string
is not null.
-a file
Same as -e below.
This is obsolete.
-b file
True, if
file
exists and is a block special file.
-c file
True, if
file
exists and is a character special file.
-d file
True, if
file
exists and is a directory.
-e file
True, if
file
exists.
-f file
True, if
file
exists and is an ordinary file.
-g file
True, if
file
exists and it has its setgid bit set.
-k file
True, if
file
exists and it has its sticky bit set.
-n string
True, if length of
string
is non-zero.
-o option
True, if option named
option
is on.
-p file
True, if
file
exists and is a fifo special file or a pipe.
-r file
True, if
file
exists and is readable by current process.
-s file
True, if
file
exists and has size greater than zero.
-t fildes
True, if file descriptor number
fildes
is open and associated with a terminal device.
-u file
True, if
file
exists and it has its setuid bit set.
-w file
True, if
file
exists and is writable by current process.
-x file
True, if
file
exists and is executable by current process.
If
file
exists and is a directory, then true if the current process
has permission to search in the directory.
-z string
True, if length of
string
is zero.
-L file
True, if
file
exists and is a symbolic link.
-O file
True, if
file
exists and is owned by the effective user id of this process.
-G file
True, if
file
exists and its group matches the effective group id of this process.
-S file
True, if
file
exists and is a socket.
file1 -nt file2
True, if
file1
exists and
file2
does not, or
file1
is newer than
file2.
file1 -ot file2
True, if
file2
exists and
file1
does not, or
file1
is older than
file2.
file1 -ef file2
True, if
file1
and
file2
exist and refer to the same file.
string == pattern
True, if
string
matches
pattern.
Any part of
pattern
can be quoted to cause it to be matched as a string.
string = pattern
Same as == above, but is obsolete.
string != pattern
True, if
string
does not match
pattern.
string1 < string2
True, if
string1
comes before
string2
based on ASCII value of their characters.
string1 > string2
True, if
string1
comes after
string2
based on ASCII value of their characters.
The following obsolete arithmetic comparisons are also permitted:
exp1 -eq exp2
True, if
exp1
is equal to
exp2.
exp1 -ne exp2
True, if
exp1
is not equal to
exp2.
exp1 -lt exp2
True, if
exp1
is less than
exp2.
exp1 -gt exp2
True, if
exp1
is greater than
exp2.
exp1 -le exp2
True, if
exp1
is less than or equal to
exp2.
exp1 -ge exp2
True, if
exp1
is greater than or equal to
exp2.
In each of the above expressions, if
file
is of the form
/dev/fd/n,
where
n
is an integer,
then the test is applied to the open file whose
descriptor number is
n.
A compound expression can be constructed from these primitives by
using any of the following, listed in decreasing order of precedence.
(expression)
True, if
expression
is true.
Used to group expressions.
! expression
True if
expression
is false.
expression1 && expression2
True, if
expression1
and
expression2
are both true.
expression1 || expression2
True, if either
expression1
or
expression2
is true.
Input/Output.
Before a command is executed, its input and output
may be redirected using a special notation interpreted by the shell.
The following may appear anywhere in a simple-command
or may precede or follow a
command
and are
not
passed on to the invoked command.
Command substitution, parameter expansion,
and arithmetic substitution occur before
word
or
digit
is used except as noted below.
File name generation
occurs only if the shell is interactive and
the pattern matches a single file.
Field splitting is not performed.
In each of the following redirections, if
file
is of the form
/dev/tcp/host/port,
or
/dev/udp/host/port,
where
host
is a hostname or host address,
and
port
is an integer port number,
then the redirection attempts to make a
tcp or udp connection to the corresponding
socket.
word
Use file
word
as standard output (file descriptor 1).
If the file does not exist then it is created.
If the file exists, and the
noclobber
option is on,
this causes an error;
otherwise, it is truncated to zero length.
>|word
Sames as
>,
except that it overrides the
noclobber
option.
>>word
Use file
word
as standard output.
If the file exists, then output is appended to it (by first seeking to the end-of-file);
otherwise, the file is created.
<>word
Open file
word
for reading and writing
as standard input.
<<[ - ]word
The shell input is read up to a line that is the same as
word
after any quoting has been removed,
or to an end-of-file.
No parameter substitution, command substitution, arithmetic substitution or
file name generation is performed on
word.
The resulting document,
called a
here-document,
becomes
the standard input.
If any character of
word
is quoted, then no interpretation
is placed upon the characters of the document;
otherwise, parameter expansion, command substitution, and arithmetic
substitution occur,
\new-line
is ignored,
and
\
must be used to quote the characters
\,
$,
`.
If
-
is appended to
<<,
then all leading tabs are stripped from
word
and from the document.
<&digit
The standard input is duplicated from file descriptor
digit
(see
dup(2)).
Similarly for the standard output using
>& digit.
<&digit-
The file descriptor given by
digit
is moved to standard input.
Similarly for the standard output using
>& digit-.
<&-
The standard input is closed.
Similarly for the standard output using
>&-.
<&p
The input from the co-process is moved to standard input.
>&p
The output to the co-process is moved to standard output.
If one of the above is preceded by a digit,
then the
file descriptor number referred to is that specified
by the digit
(instead of the default 0 or 1).
For example:
. . . 2>&1
means file descriptor 2 is to be opened
for writing as a duplicate
of file descriptor 1.
The order in which redirections are specified is significant.
The shell evaluates each redirection in terms of the
(file descriptor, file)
association at the time of evaluation.
For example:
. . . 1>fname 2>&1
first associates file descriptor 1 with file
fname .
It then associates file descriptor 2 with the file associated with file
descriptor 1 (i.e.
fname ).
If the order of redirections were reversed, file descriptor 2 would be associated
with the terminal (assuming file descriptor 1 had been) and then file descriptor
1 would be associated with file
fname .
If a command is followed by
&
and job control is not active,
then the default standard input
for the command
is the empty file
/dev/null.
Otherwise, the environment for the execution of a command contains the
file descriptors of the invoking shell as modified by
input/output specifications.
Environment.
The
environment
(see
environ(7))
is a list of name-value pairs that is passed to
an executed program in the same way as a normal argument list.
The names must be
identifiers
and the values are character strings.
The shell interacts with the environment in several ways.
On invocation, the shell scans the environment
and creates a
variable
for each name found,
giving it the corresponding value and attributes and marking it
export.
Executed commands inherit the environment.
If the user modifies the values of these
variables
or creates new ones,
using the
export
or
typeset-x
commands, they become part of the
environment.
The environment seen by any executed command is thus composed
of any name-value pairs originally inherited by the shell,
whose values may be modified by the current shell,
plus any additions
which must be noted in
export
or
typeset-x
commands.
The environment for any
simple-command
or function
may be augmented by prefixing it with one or more variable assignments.
A variable assignment argument is a word of the form
identifier=value.
Thus:
TERM=450 cmd args and
(export TERM; TERM=450; cmd args)
are equivalent (as far as the above execution of
cmd
is concerned except for special built-in commands listed below -
those that are
preceded with a dagger).
If the obsolete
-k
option is set,
all
variable assignment arguments are placed in the environment,
even if they occur after the command name.
The following
first prints
a=b c
and then
c:
echo a=b c
set -k
echo a=b c
This feature is intended for use with scripts written
for early versions of the shell and its use in new scripts
is strongly discouraged.
It is likely to disappear someday.
Functions.
For historical reasons, there are two
ways to define functions,
the
name( )
syntax and
the
function
name
syntax, described in the
Commands
section above.
Shell functions are read in and stored internally.
Alias names are resolved when the function is read.
Functions are executed like commands with the arguments
passed as positional parameters.
(See
Execution
below.)
Functions defined by the
function
name
syntax and called by name execute in the same process as the caller and
share all files
and present working directory with the
caller.
Traps caught by the caller are reset to their default action
inside the function.
A trap condition that is not caught or ignored by the
function causes the function to terminate and the condition
to be passed on to the caller.
A trap on
EXIT
set inside a function
is executed
in the environment
of the caller
after the function completes.
Ordinarily,
variables are shared between the calling program
and the function.
However,
tразделы
басейны intex
высокотемпературный электроизоляция
создание лого
инерта краска
конвейер
аденома
танго кэш
помидор купля
ковры резиновый
купить блендер
шелкография
подбор контрацепция
доставка окон
российский флаг
inerta краска
операторский центр
kyiv apartaments service
пазл
intex
восстановление потенция
решетка оцинкованный
хендэ соната
длинный нард
микросреда компания
фосфорный краска
холодильник бош
измеритель rlc
подгонный компенсатор danfoss
георешетка
фарфор portofino
уличный барбекю
gislaved отзыв
внешний антенна
mobilux
доставка
авиа отправка
мэш
итальянский вина
регестрация пбоюл
обрезание
вилатерм
изготовление презентация
венеролог
заказать микроавтобус
кожгалантерея
время владимир
корпоративный иностранный
слоеный изделие
организация видеоконференция
fargo
зубной протез
автоподъемник
туба машина
серверные корпус консольный переключатель
центральный детский мир
1000 холодильник
решетка дренажный
ziplock
1с бюджетирование
врач акушер гинеколог
ваза 2114
конкурентный анализ
организовать рассылка
i`m o.k./герои гроб
холодильный камера
сервис холодильник
ваттметр
сенсорный экран устройство
букмекерский контора фаворит
вызов водитель
бейсболки заказ
мэш
thuraya sg 2520
медикаментозный прерывание беременность
профессиональный фарфор
антенна бустер
путевой стена
жила кострома
плазменный панель настенный
индивидуальный банковский ячейка
snr
срок реализация рак
шампанский заказ
обзвон
брэнд
dunlup 205 55 r16
кислородный концентратор
купить nokia 9300i
краска двухкомпонентный
тестоокруглитель ленточный
мачта флагшток
sony ericsson k790i купить
shell