高级shell编程笔记(第二十四章 别名)

第二十四章 别名

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

在脚本里,别名机制不是非常的有用。如果把别名机制相像成C预处理器的某些功能将会非常好,比如宏扩展;但是,不幸的是Bash不能在别名中扩展参数。而且,别名不能在"混合型的结构"中使用,比如if/then语句、循环和函数。还有一个限制是别名不能递归的扩展。

Example 24-1 脚本中的别名

#!/bin/bash
#
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 /opt/shell

echo
directory=/opt/shell/
prefix=*.sh   #看通配符会不会引起麻烦
echo "Variables \"directory\"+\"prefix\"=$directory$prefix"
echo
alias lll="ls -l $directory$prefix"
echo "Trying aliased \"lll\":"
lll


TRUE=1
echo
if [ TRUE ];then
  alias rr="ls -l"
  echo "Trying aliased \"rr\" within if/then statement:"
  rr /opt/shell/*.sh   #* 引起错误信息!
  #别名不能在混合结构中使用.
  echo "但是,以前扩展的alias仍然可以识别:"
  ll /opt/shell/*.sh
fi
echo

count=0
while [ $count -lt 3 ]
do
  alias rrr="ls -l"
  echo "Trying aliased \"rrr\" withn \"while\" loop:"
  rrr /opt/shell/*.sh   #* 在这儿,别名也不会扩展.
  let "count += 1"
done
echo;echo

alias xyz='cat $0'   # 脚本打印自身内容.
xyz
exit 0

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

Example 24-2 unalias:设置和删除别名

#!/bin/bash
#
shopt -s expand_aliases # 打开别名功能扩展.

alias llm="ls -al | more"
llm
echo
unalias llm
llm
exit 0
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页