为了在同名函数内或其他任何地方使用内置命令,您可以使用builtin precommand 修饰符:
function cd() {
builtin cd $1
ls .
}
builtin COMMAND 告诉 zsh 使用名称为 COMMAND 的内置命令,而不是同名的别名、函数或外部命令。如果这样的内置函数不存在,则会打印错误消息。
如果您想使用外部命令而不是别名、内置命令或同名函数,您可以使用command 前置命令修饰符。例如:
command echo foobar
这将使用二进制echo(很可能是/bin/echo)而不是zsh的内置echo。
与函数 builtin 和 command 不同,通常不需要使用别名来防止递归。虽然可以在别名定义中使用别名
% alias xx="echo x:"
% alias yy="xx y:"
% yy foobar
y: x: foobar
每个别名只会扩展一次。在第二次出现时,别名将不会被扩展,而是会使用函数、内置或外部命令。
% alias echo="echo echo:"
% echo foobar
echo: foobar
% alias xx="yy x:"
% alias yy="xx y:"
% xx foobar
zsh: command not found: xx
当然,如果您想阻止使用另一个别名,或者如果您想专门使用内置或外部命令,您仍然可以在别名中使用builtin 或command。例如:
alias echo="command echo"
这样,二进制 echo 将被使用而不是内置。