Linux Shell程式設計(30)——別名

尹成發表於2014-09-30
Bash別名本質上是一個簡稱, 縮寫, 這可避免鍵入過長的命令序列. 例如,如果我們新增 alias lm="ls -l | more" 這一行到檔案~/.bashrc file裡, 然後每次在命令列鍵入lm 將會自動被替換成ls -l | more. 這使使用者在命令列不必鍵冗長的命令序列也避免了記憶複雜的命令及眾多選項. 設定alias rm="rm -i" (互動式刪除)可以使你犯下錯誤時不必過度悲傷,它能避免你不小心刪除重要檔案.


在指令碼里,別名機制不是非常的有用. 如果把別名機制想像成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 命令刪除先前設定的別名.

相關文章