Get the expansion of an alias (in both bash and zsh)
In zsh
, you can just use
get_alias() {
printf '%s\n' $aliases[$1]
}
With bash
(assuming it's not in POSIX mode in which case its alias
would give an output similar to zsh
's), you could do:
get_alias() (
eval '
alias() { printf "%s\n" "${1#*=}"; }'"
$(alias -- "$1")"
)
Basically, we evaluate the output of alias
after having redefined alias
as a function that prints what's on the right of the first =
in its first argument.
You could use a similar approach for something compatible with most POSIX shells, zsh
and bash
:
get_alias() {
eval "set -- $(alias -- "$1")"
eval 'printf "%s\n" "${'"$#"'#*=}"'
}
Based on Stéphane Chazelas' answer, I came up with:
function alias_expand {
if [[ $ZSH_VERSION ]]; then
# shellcheck disable=2154 # aliases referenced but not assigned
[ ${aliases[$1]+x} ] && printf '%s\n' "${aliases[$1]}" && return
else # bash
[ "${BASH_ALIASES[$1]+x}" ] && printf '%s\n' "${BASH_ALIASES[$1]}" && return
fi
false # Error: alias not defined
}
(with bash 4.0 or newer).