在脚本里,别名机制不是非常的有用. 如果把别名机制想像成C预处理器的某些功能将会非常好,比如宏扩展,但是,不幸的是Bash不能在别名中扩展参数.而且,别名不能在“混合型的结构”中使用,比如if/then语句, 循环, 和函数. 还有一个限制是别名不能递归地扩展.
例子:脚本中的别名
#!/bin/bash # alias.sh shopt -s expand_aliases # 必须设置这个选项,否则脚本不会扩展别名功能. alias Jesse_James='echo ""Alias Jesse James" was a 1959 comedy starring Bob Hope."' Jesse_James echo; echo; echo; alias ll="ls -l" # 可以使用单引号(')或双引号(")来定义一个别名. echo "Trying aliased "ll":" ll /usr/X11R6/bin/mk* #* 别名工作了. echo directory=/usr/X11R6/bin/ prefix=mk* # 看通配符会不会引起麻烦. echo "Variables "directory" + "prefix" = $directory$prefix" echo alias lll="ls -l $directory$prefix" echo "Trying aliased "lll":" lll # 详细列出在/usr/X11R6/bin目录下所有以mk开头的文件. # 别名能处理连接变量 -- 包括通配符 -- o.k. TRUE=1 echo if [ TRUE ] then alias rr="ls -l" echo "Trying aliased "rr" within if/then statement:" rr /usr/X11R6/bin/mk* #* 引起错误信息! # 别名不能在混合结构中使用. echo "However, previously expanded alias still recognized:" ll /usr/X11R6/bin/mk* fi echo count=0 while [ $count -lt 3 ] do alias rrr="ls -l" echo "Trying aliased "rrr" within "while" loop:" rrr /usr/X11R6/bin/mk* #* 在这儿,别名也不会扩展. let count+=1 done echo; echo alias xyz='cat $0' # 脚本打印自身内容. # 注意是单引号(强引用). xyz exit 0
unalias 命令删除先前设置的别名.