gNU Bourne-Again SHell (GNU Bourne-Again SHell)
ALIASES
Aliases allow a string to be substituted for a word when it is
used as the first word of a simple command. The shell maintains
a list of aliases that may be set and unset with the alias
and
unalias
builtin commands (see SHELL BUILTIN COMMANDS
below). The
first word of each simple command, if unquoted, is checked to see
if it has an alias. If so, that word is replaced by the text of
the alias. The characters /
, $
, `
, and =
and any of the shell
metacharacters or quoting characters listed above may not appear
in an alias name. The replacement text may contain any valid
shell input, including shell metacharacters. The first word of
the replacement text is tested for aliases, but a word that is
identical to an alias being expanded is not expanded a second
time. This means that one may alias ls
to ls -F
, for instance,
and bash
does not try to recursively expand the replacement text.
If the last character of the alias value is a blank, then the
next command word following the alias is also checked for alias
expansion.
Aliases are created and listed with the alias
command, and
removed with the unalias
command.
There is no mechanism for using arguments in the replacement
text. If arguments are needed, a shell function should be used
(see FUNCTIONS
below).
Aliases are not expanded when the shell is not interactive,
unless the expand_aliases
shell option is set using shopt
(see
the description of shopt
under SHELL BUILTIN COMMANDS
below).
The rules concerning the definition and use of aliases are
somewhat confusing. Bash
always reads at least one complete line
of input, and all lines that make up a compound command, before
executing any of the commands on that line or the compound
command. Aliases are expanded when a command is read, not when
it is executed. Therefore, an alias definition appearing on the
same line as another command does not take effect until the next
line of input is read. The commands following the alias
definition on that line are not affected by the new alias. This
behavior is also an issue when functions are executed. Aliases
are expanded when a function definition is read, not when the
function is executed, because a function definition is itself a
command. As a consequence, aliases defined in a function are not
available until after that function is executed. To be safe,
always put alias definitions on a separate line, and do not use
alias
in compound commands.
For almost every purpose, aliases are superseded by shell
functions.