Tom*_*ale 6 shell bash zsh alias
我想获得别名的扩展。
例如,如果我有:
alias g=hub
alias cdh='cd $HOME'
Run Code Online (Sandbox Code Playgroud)
我希望有:
expand_alias g == hub
expand_alias cdh == cd $HOME
棘手的是两个shell有不同的输出:bash:
$ alias g cdh
alias g='git'
alias cdh='cd $HOME'
Run Code Online (Sandbox Code Playgroud)
zsh:
% alias g cdh
g=hub
cdh='cd $HOME'
Run Code Online (Sandbox Code Playgroud)
注意没有alias 前缀,也没有引号hub。
在zsh,你可以使用
get_alias() {
printf '%s\n' $aliases[$1]
}
Run Code Online (Sandbox Code Playgroud)
使用bash(假设它不在 POSIX 模式下,在这种情况下它alias会给出类似于zsh's的输出),您可以执行以下操作:
get_alias() (
eval '
alias() { printf "%s\n" "${1#*=}"; }'"
$(alias -- "$1")"
)
Run Code Online (Sandbox Code Playgroud)
基本上,我们评估aliasafter 重新定义alias为一个函数的输出,该函数打印第=一个参数中第一个右侧的内容。
您可以对与大多数 POSIX shell 兼容的东西使用类似的方法,zsh并且bash:
get_alias() {
eval "set -- $(alias -- "$1")"
eval 'printf "%s\n" "${'"$#"'#*=}"'
}
Run Code Online (Sandbox Code Playgroud)
根据St\xc3\xa9phane Chazelas\' 的回答,我想出了:
\nfunction alias_expand {\n if [[ $ZSH_VERSION ]]; then\n # shellcheck disable=2154 # aliases referenced but not assigned\n [ ${aliases[$1]+x} ] && printf \'%s\\n\' "${aliases[$1]}" && return\n else # bash\n [ "${BASH_ALIASES[$1]+x}" ] && printf \'%s\\n\' "${BASH_ALIASES[$1]}" && return\n fi\n false # Error: alias not defined\n}\nRun Code Online (Sandbox Code Playgroud)\n(使用 bash 4.0 或更高版本)。
\n| 归档时间: |
|
| 查看次数: |
2653 次 |
| 最近记录: |