别名(ALIASES)

Aliases (别名机制) 允许将一个词来替换为一个字符串,如果它是 一个简单命令的第一个词的话。shell 记录着一个别名列表,可以使用 内建命令 aliasunalias 来定义和取消 (参见下面的 shell 内建命令(SHELL BUILTIN COMMANDS) 章节)。每个命令的第一个词,如果没有引用,都将被检查是否是一个别名。 如果是,这个词将被它所指代的文本替换。别名和替换的文本可以包含任何有效 的 shell 输入,包含上面列出的 metacharacters (元字符) ,特殊情况是别名中不能包含 =。替换文本的第一个词也被检查是否 是别名,但是如果它与被替换的别名相同,就不会再替换第二次。这意味着可以用 ls 作为 ls -F 的别名, bash 不会递归地展开替换文本。如果别名的最后一个字符是 blank, 那么命令中别名之后的下一个词也将被检查是否能进行别名展开。

别名可以使用 alias 命令来创建或列举出来,使用 unalias 命令来删除。

在替换文本中没有参数机制。如果需要参数,应当使用 shell 函数 (参见下面的 FUNCTIONS (函数) 段落)。

如果 shell 不是交互的,别名将不会展开,除非使用内建命令 shopt 设置了 expand_aliases 选项。

关于别名的定义和使用中的规则比较混乱。 Bash 在执行一行中的任何命令之前,总是读入至少完整一行的输入。 别名在命令被读取时展开,而不是在执行的时候。因此,别名定义如果 和另一个命令在同一行,那么不会起作用,除非读入了下一行。 别名定义之后,同一行中的命令不会受新的别名影响。这种行为 在函数执行时存在争议,因为别名替换是在函数定义被读取时发生的, 而不是函数被执行的时候,因为函数定义本身是一个复合命令。结果, 在函数中定义的别名只有当这个函数执行完才会生效。为了保险起见, 应当总是将别名定义放在单独的一行,不在复合命令中使用 alias。

不管什么情况下,别名都被 shell 函数超越 (be superseded)。