关于编程语言內的变量别名，请见「**Aliasing**」。

在计算机运算中，**alias** 是许多命令行界面的命令，比如 Unix shell，4DOS/4NT 和 Windows PowerShell 等，它给用户提供了别名——也就是用自定义字符串替换指定命令的功能，通常用于简写系统命令，或给常用命令添加默认选项，MS-DOS 和 Microsoft Windows 操作系统內，通常使用 `DOSKey` 命令定义别名。

alias 命令的作用时间是命令运行之后到 shell 会话结束，经常使用的别名可在 shell 的配置文件比如 C Shell（csh）的 `~/.cshrc` 或 Bourne Again Shell 的 `~/.bashrc` 里定义，如此当相应的 shell 会话启动后就可以使用这些自定义的别名了。alias 命令可以直接写入这些配置文件，或单独放在一个文件，比如 .alias 里，或依用户使用的解释器分别定义于 .alias-bash，.alias-csh 等文件，然后使用 source 命令执行该文件来设定。

定义别名
----

别名可以使用给 alias 命令指定键值对参数的方式定义，在 Bash 內，语法如下：

```
alias copy='cp'
```

同样的别名，在 csh 或 tcsh 里可以这样指定：

```
alias copy "cp"
```

这个别名的作用，是当用户在命令行內输入 copy 时，命令行解释器会把该命令替换为 cp 命令来执行。

在 4DOS/4NT 命令行內，可以使用以下命令把 cp 定义为 4DOS 的 `copy` 命令的别名：

```
alias cp copy
```

要在 Windows PowerShell 內定义别名，可以使用以下命令：

```
new-alias ci copy-item
```

以上命令给 Windows PowerShell 的 `copy-item` 命令定义了一个别名 `ci`，因此用户在 Windows PowerShell 里输入 ci 时，实际执行的是 `copy-item` 命令。

历史
--

Unix 內，alias 命令是由 C shell 引入的，之后也被加入到 tcsh 和 Bash 內。C shell 的别名被严格限制在一行里，复杂的 shell 语言则需要多行，不过单行别名对建立快捷的命令仍然很有用。Bourne shell（sh）內没有别名功能，但它有更强大的 shell 函数方式。Bash 和 Korn shell（ksh）则同时支持函数和别名，并建议在可能时尽量使用函数。

查看當前已定義的别名
----------

要查看當前命令行已定義的别名，可以用以下命令：

```
alias          # 不帶參數運行 alias 命令，可顯示當前已定義的别名列表
alias -p       # 同上，但在 4DOS/4NT 和 PowerShell 里無效
alias *myAlias*  # 顯示指定别名取代的實際命令
```

忽略别名
----

在 Unix shells 里，如果别名已经指定过，可以把命令放在引号里，或在前面添加一个反斜杠来使别名定义失效。比如，若已定义了以下别名：

```
alias ls='ls -la'
```

要使以上别名失效并强制执行原始的 `ls` 命令，可使用以下语法：

```
'ls'
```

或

```
\ls
```

在 4DOS/4NT 命令行里，则可以在命令前面添加星号来使已定义的别名失效，比如，可用以下方式定义别名：

```
alias dir = *dir /2/p
```

第二个 dir 命令前的星号，确保其运行的是原始的 dir 命令，避免递归地别名展开，用户还可以运行以下命令，确保运行的是原始（未设定别名的）dir 命令：

```
*dir
```

更改别名
----

在 Windows PowerShell 里，可使用以下命令更改一个已经存在的别名：

```
set-alias ci cls
```

运行以上命令后，`ci` 将变成 `cls` 命令的别名。

删除别名
----

在 Unix shell 和 4DOS/4NT 里，别名可以通过 `unalias` 命令清除：

```
 unalias copy # 删除 copy 别名
 unalias -a # -a 选项会清除所有已定义的别名，此选项在 4DOS/4NT 里无效

```

```
unalias *             # 4DOS/4NT 的清除别名命令，支持通配符
```

在 Windows PowerShell 里，别名可用以下命令删除：

```
 remove-item alias:ci  # 删除别名 ci

```

特性
--

### Chaining

别名通常只替换第一个词，但有些命令行解释器，比如 Bash 和 ksh 允许替换一个字符序列或几个单词，这个特性使用 shell 函数方式是做不到的。

通常的语法是在第一个定义的别名所替换的命令后加一个空格，比如定义以下两个别名：

```
alias list='ls '      # 注意 ls 后面的空格
alias long='-Flas'    # ls 的选项
```

然后可运行

```
list long myfile      # 运行时被解释为 ls -Flas myfile
```

来列出文件详细信息，可见命令行解释器对 long 也进行了别名展开。

### 别名里的引用

要使用单引号定义一个里面带有单引号的别名，比如要给以下 perl 脚本定义别名：

```
 $ perl -pe 's/^(.*) foo/$1 bar/;'
```

你不能这样简单转义：

```
 $ alias foo2bar='perl -pe \'s/^(.*) foo/$1 bar/;\'' # 错误：反斜杠并不会对后一个字符进行转义
```

不过，可以这样：

```
 $ alias foo2bar='perl -pe '\''s/^(.*) foo/$1 bar/;'\''' # 把反斜杠放在引号里使之成为 '\'
```

但你可以在双引号里使用单引号。

```
 $ alias foo2bar='perl -pe '"'"'s/^(.*) foo/$1 bar/;'"'"''
```

你也可以使用 shell 函数方式，而非使用别名。

### 命令参数

在 C Shell 里，命令的参数可以通过字符串 \!\* 嵌入到别名定义里，比如定义以下别名：

```
alias l-less 'ls \!* | less'
```

然后执行 l-less /etc /usr，命令会被展开成 ls /etc /usr | less，即列出 /etc 和 /usr 两个目录的文件，且满屏后暂停，若没有 \!\*，

```
alias l-less 'ls | less'
```

会被展开成 ls | less /etc /usr，这将会错误的试图用 less 打开后两个目录。

Bash 和 Korn shell 里，可以使用 shell 函数做到，参见下文的**备选**段落。

典型别名
----

Bash 里一些常用的别名：

```
alias ls='ls --color=auto' # 输出显示为彩色
alias la='ls -Fa'          # 列出所有文件
alias ll='ls -Fls'         # 列出文件详细信息

alias rm='rm -i'           # 删除前需确认
alias cp='cp -i'           # 覆盖前需确认
alias mv='mv -i'           # 覆盖前需确认

alias vi='vim'             # 输入 vi 命令时使用 vim 编辑器
```

Windows PowerShell 的标准别名：

```
new-alias cd set-location

new-alias ls get-childitem
new-alias dir get-childitem

new-alias echo write-output
new-alias ps get-process
new-alias kill stop-process
```

备选
--

别名应保持简单，否则应考虑以下备选方式：

* 命令脚本，通过脚本可以创建新的系统命令。

* 符号链接，可放在 /usr/local/bin 给所有用户使用，或放在用户自己的 $HOME/bin 目录，只供自己使用。这提供了一个调用命令的新方式，并在某些情况下，对少数支持使用调用名选择操作模式的命令，允许使用其隐含的命令函数。

* Shell 函数，特别是如果命令需要修改 shell 内部运行环境（如环境变量）、改变当前工作目录、或在非交互 shell 使用情况下出现在搜索路径里面（特别是"较安全的" rm，cp，mv 版本等等）。

别名最常见的使用方式，是给命令添加常用的选项，这可以使用定义简单 Shell 函数的方式代替：

```
 alias ll='ls -Flas' # 列出文件详细信息，别名方式
 ll () { ls -Flas "$@" ; } # 列出文件详细信息，Shell 函数方式

```

把 **ls** 本身定义成函数，可以用以下方式定义（注意这是 Bash 的 ls 命令，较老的 Bourne shell 需要使用 /bin/ls 代替）：

```
 ls () { command ls --color=auto "$@" ; }

```

参考资料
----

1. ↑ .  [2014-03-23]. （原始内容存档于2013-07-03）.
2. ↑ .  [2014-03-23]. （原始内容存档于2012-11-25）.

外部链接
----

* `alias`: 定义或显示别名 – 命令与工具（Commands & Utilities）参考，单一UNIX®规范第7期，由國際開放標準組織发布
* Bash 的 alias 手册页（页面存档备份，存于）
* The Linux 信息项目（LINFO）上的 alias 命令
* 在Linux中设置Alias别名（页面存档备份，存于）




|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
Unix命令行程序和shell内建命令 |
| --- |
|  |
| 文件系統 | 
* cat
* cd
* chmod
* chown
* chgrp
* cksum
* cmp
* cp
* dd
* du
* df
* file
* fsck
* fuser
* ln
* ls
* mkdir
* mount
* mv
* pax（英语：）
* pwd
* rm
* rmdir
* size
* split
* stat
* tee
* touch
* type（英语：）
* umask（英语：）

 |
|  |
| 程序 | 
* at
* bg
* chroot
* cron
* fg
* kill
* killall（英语：）
* nice
* pgrep
* pkill（英语：）
* ps
* pstree（英语：）
* time
* top

 |
|  |
| 用户环境 | 
* clear
* env
* exit
* history（英语：）
* id
* logname
* mesg（英语：）
* passwd
* su
* sudo
* uptime
* talk（英语：）
* tput（英语：）
* uname
* w
* wall（英语：）
* who
* whoami
* write（英语：）

 |
|  |
| 文本编辑 | 
* awk
* banner（英语：）
* basename
* comm（英语：）
* csplit（英语：）
* cut
* diff
* dirname
* ed
* ex
* fmt（英语：）
* fold（英语：）
* head（英语：）
* iconv
* join（英语：）
* less
* more
* nl（英语：）
* paste（英语：）
* sed
* sort（英语：）
* spell（英语：）
* strings（英语：）
* tail
* tr
* uniq（英语：）
* vi
* wc
* xargs

 |
|  |
| 壳层内建 | 
* alias
* echo
* printf格式字符串
* test（英语：）
* unset
* wait

 |
|  |
| 网络 | 
* dig
* host
* ifconfig
* inetd（英语：）
* netcat
* netstat
* nslookup
* ping
* rdate（英语：）
* rlogin（英语：）
* route
* ssh
* traceroute

 |
|  |
| 查找 | 
* find
* grep
* locate
* whatis（英语：）
* whereis

 |
|  |
| 文档 | 
* apropos（英语：）
* help（英语：）
* man

 |
|  |
| 软件开发 | 
* ar
* ctags
* lex
* make
* nm
* strip
* yacc

 |
|  |
| 杂项 | 
* bc
* cal
* dc
* expr
* lp（英语：）
* lpr
* sleep
* true和false
* yes

 |
|  |
| Unix实用程序列表 |

 |