bash: Aliases

 
 6.6 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.
 
    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 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, as
 in 'csh'.  If arguments are needed, a shell function should be used
 (SeeShell Functions).
 
    Aliases are not expanded when the shell is not interactive, unless
 the 'expand_aliases' shell option is set using 'shopt' (SeeThe Shopt
 Builtin).
 
    The rules concerning the definition and use of aliases are somewhat
 confusing.  Bash always reads at least one complete line of input before
 executing any of the commands on that line.  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, shell functions are preferred over aliases.