我觉得zsh即使在函数内调用它也会扩展别名,例如
alias abc='echo abc'
function fabc(){abc}
Run Code Online (Sandbox Code Playgroud)
是否可以在此函数中禁用别名扩展?
还有一个相关问题:是否可以在整个交互式 shell 中禁用别名扩展?
您可以禁用特定别名
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)