目录
当前位置: 首页 > 文档资料 > Shell 中文文档 >

第24章. 别名 Aliases

优质
小牛编辑
127浏览
2023-12-01

Bash别名本质上是一个简称, 缩写, 这可避免键入过长的命令序列. 例如,如果我们添加 alias lm="ls -l | more"这一行到文件~/.bashrcfile里, 然后每次在命令行键入lm将会自动被替换成ls -l | more. 这使用户在命令行不必键冗长的命令序列也避免了记忆复杂的命令及众多选项. 设置alias rm="rm -i"(交互式删除)可以使你犯下错误时不必过度悲伤,它能避免你不小心删除重要文件.

在脚本里,别名机制不是非常的有用. 如果把别名机制想像成C预处理器的某些功能将会非常好,比如宏扩展,但是,不幸的是Bash不能在别名中扩展参数.

例子 24-1. 脚本中的别名

   1 #!/bin/bash
   2 # alias.sh
   3
   4 shopt -s expand_aliases
   5 # 必须设置这个选项,否则脚本不会扩展别名功能.
   6
   7
   8 # 首先, 来点有趣的.
   9 alias Jesse_James='echo "\"Alias Jesse James\" was a 1959 comedy starring Bob Hope."'
  10 Jesse_James
  11
  12 echo; echo; echo;
  13
  14 alias ll="ls -l"
  15 # 可以使用单引号(')或双引号(")来定义一个别名.
  16
  17 echo "Trying aliased \"ll\":"
  18 ll /usr/X11R6/bin/mk*   #* 别名工作了.
  19
  20 echo
  21
  22 directory=/usr/X11R6/bin/
  23 prefix=mk*  # 看通配符会不会引起麻烦.
  24 echo "Variables \"directory\" + \"prefix\" = $directory$prefix"
  25 echo
  26
  27 alias lll="ls -l $directory$prefix"
  28
  29 echo "Trying aliased \"lll\":"
  30 lll         # 详细列出在/usr/X11R6/bin目录下所有以mk开头的文件.
  31 # 别名能处理连接变量 -- 包括通配符 -- o.k.
  32
  33
  34
  35
  36 TRUE=1
  37
  38 echo
  39
  40 if [ TRUE ]
  41 then
  42   alias rr="ls -l"
  43   echo "Trying aliased \"rr\" within if/then statement:"
  44   rr /usr/X11R6/bin/mk*   #* 引起错误信息!
  45   # 别名不能在混合结构中使用.
  46   echo "However, previously expanded alias still recognized:"
  47   ll /usr/X11R6/bin/mk*
  48 fi
  49
  50 echo
  51
  52 count=0
  53 while [ $count -lt 3 ]
  54 do
  55   alias rrr="ls -l"
  56   echo "Trying aliased \"rrr\" within \"while\" loop:"
  57   rrr /usr/X11R6/bin/mk*   #* 在这儿,别名也不会扩展.
  58                            #  alias.sh: line 57: rrr: command not found
  59   let count+=1
  60 done
  61
  62 echo; echo
  63
  64 alias xyz='cat $0'   # 脚本打印自身内容.
  65                      # 注意是单引号(强引用).
  66 xyz
  67 #  虽然Bash的文档它是不会工作的,但好像它是可以工作的.
  68 #
  69 #
  70 #  然而,就像 Steve Jacobson指出,
  71 #+ 参数"$0"立即扩展成了这个别名的声明.
  72
  73 exit 0

unalias命令删除先前设置的别名.

例子 24-2. unalias: 设置和删除别名

   1 #!/bin/bash
   2 # unalias.sh
   3
   4 shopt -s expand_aliases  # 打开别名功能扩展.
   5
   6 alias llm='ls -al | more'
   7 llm
   8
   9 echo
  10
  11 unalias llm              # 删除别名.
  12 llm
  13 # 引起错误信息,因为'llm'已经不再有效了.
  14
  15 exit 0
 
bash$ 


./unalias.sh

 
total 6
drwxrwxr-x    2 bozo     bozo         3072 Feb  6 14:04 .
drwxr-xr-x   40 bozo     bozo         2048 Feb  6 14:04 ..
-rwxr-xr-x    1 bozo     bozo          199 Feb  6 14:04 unalias.sh
./unalias.sh: llm: command not found

[1]

但是, 别名好像能扩展位置参数.