如何转义 Bash 函数

如何转义 Bash 函数

我在 WSL2 上的文件中有以下功能.bashrc

cd() {
    builtin cd "$@" && ls
}

我在 Cygwin 上使用过这个,没有问题多年,它在 WSL2 上运行得也一样好,除了一个问题:我似乎无法cd在 中使用新别名的内置功能.bashrc

如果cd()是别名而不是函数,我可以使用以下命令对其进行转义:

alias new="\cd .. && echo 'This is a new alias'"

或者

\cd ..

在命令行上。但此覆盖似乎无法cd()像使用别名那样使用该函数。

是否可以覆盖 Bash 中的函数?

答案1

是的,通过使用builtin cd

(外部命令的等效项是command,例如ls() { command ls ...; }。)


注意\适用于别名,因为它们的扩展会发生反斜杠处理和其他解析步骤,因此 shell 实际上会尝试查找字面上命名的别名\cd(不存在)。

因此,该技巧不适用于函数,因为它们充当完全正常的命令,并在很晚的阶段得到解决(此时反斜杠处理已经变成\foo常规foo)。

相关内容