在许多情况下,我需要创建与其他程序同名的函数,并且我不知道这是否是使用 bash 脚本的好方法。
例子:
function echo () {
echo -n "$@" ;
}
测试后看起来它会在 bin 路径之前检查脚本内的函数名称。我想确定这一点以及我应该知道的任何其他信息。
答案1
echo() {
command echo -n "$@"
}
在这里使用command
意味着请求echo
命令(恰好是内置的)而不是函数,否则函数会优先。
由于这里,也恰好是一个内置命令(顺便说一句,由于内置命令优先于文件系统命令,所以echo
不会在其中查找),您也可以这样做:$PATH
echo() {
builtin echo -n "$@"
}
后一种方法在 中更可取zsh
,command echo
将在其中运行/bin/echo
(仿真除外sh
)。
shell 之间存在一些细微的差异,但优先顺序通常是:
- 特殊的内置函数
- 功能
- 内置函数
- 命令
$PATH
(并且顺序取决于内置命令管理的表中$PATH
和表中的顺序)hash
hash
请记住,shell 语法中的别名和关键字 ( for
, if
...) 如果未加引号,则将被视为在这些别名和关键字之前。
在某些 shell 中,1
和的顺序是相反的,例如或。当作为 调用时,不允许使用与特殊内置函数相同的名称来定义函数。2
bash
zsh
bash
sh