zsh 暂时禁用函数内的别名

Liu*_*Sha 4 zsh

我觉得zsh即使在函数内调用它也会扩展别名,例如

alias abc='echo abc'
function fabc(){abc}
Run Code Online (Sandbox Code Playgroud)

是否可以在此函数中禁用别名扩展?

还有一个相关问题:是否可以在整个交互式 shell 中禁用别名扩展?

roo*_*ols 9

您可以禁用特定别名

unalias abc
Run Code Online (Sandbox Code Playgroud)

或所有别名

unalias -a
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是强制命令不使用带反斜杠的别名

\abc
Run Code Online (Sandbox Code Playgroud)

在函数中使用时,问题会更加困难......从这里看来,您无法在函数中定义或取消定义别名。

别名在读取函数定义时展开,而不是在执行函数时展开,因为函数定义本身就是复合命令。

所以你可能想做类似的事情

alias abc='echo abc'

myaliases=$(alias -L)
unalias -a
function fabc(){
    abc
}
eval $myaliases; unset myaliases

fabc
abc
Run Code Online (Sandbox Code Playgroud)