動機
定番のalias。
case "$OSTYPE" in
freebsd*|darwin*)
alias ls='ls -F -G -w';;
linux*)
alias ls='ls -F --color=auto';;
esac
共通しているオプションがあるので、下のように書きたい。
alias ls='ls -F'
case "$OSTYPE" in
freebsd*|darwin*)
alias ls='ls -G -w';;
linux*)
alias ls='ls --color=auto';;
esac
しかしこれでは単にaliasを上書きしているだけなので、最初のaliasは跡形もなく消えます。
$ alias ls='ls -F'
$ alias ls='ls --color=auto'
$ alias ls
ls='ls --color=auto'
案1. 変数を使う
ls=ls
ls="$ls -F"
ls="$ls --color=auto"
alias ls="$ls"
unset ls
愚直です。何をしているかは分かりやすいです。
案2. evalを使う
alias ls=ls
eval alias $(alias ls)"' -F'"
eval alias $(alias ls)"' --color'"
ちょっと黒魔術的です。
関数化
_alias() { echo alias $(alias $1 || echo "'$1=$1'")"'${2:gs/\'/"'\\''"/}'"; }
eval $(_alias ls ' -F')
eval $(_alias ls ' --color')
aliasが存在しない場合の処理やらなんやら追加したら長くなったので関数化しました。
黒魔術度が増しました。