エイリアスの拡張子を取得したい。
たとえば、次のような場合があります。
alias g=hub
alias cdh='cd $HOME'
私は以下が欲しい:
expand_alias g
==hub
expand_alias cdh
==cd $HOME
難しいのは、両方のシェルの出力が互いに異なることです。 bash:
$ alias g cdh
alias g='git'
alias cdh='cd $HOME'
ジシュ語:
% alias g cdh
g=hub
cdh='cd $HOME'
alias
周囲にプレフィックスと引用符がないことに注意してくださいhub
。
ベストアンサー1
あなたはzsh
使用することができます
get_alias() {
printf '%s\n' $aliases[$1]
}
を使用するとbash
(POSIXモードではないと仮定し、この場合alias
と同様の出力が提供されますzsh
)、次のことができます。
get_alias() (
eval '
alias() { printf "%s\n" "${1#*=}"; }'"
$(alias -- "$1")"
)
alias
alias
デフォルトでは、最初の引数の最初の右側の内容を印刷する関数でオーバーライドした後、出力を評価します。=
ほとんどのPOSIXシェルと互換性があるように、同様のアプローチを使用できますzsh
。bash
get_alias() {
eval "set -- $(alias -- "$1")"
eval 'printf "%s\n" "${'"$#"'#*=}"'
}