首页 > 解决方案 > 它是一种在 bash 中禁用功能并强制执行内置函数的方法吗

问题描述

我正在为test内置函数编写一个包装函数,假设在每次测试后打印出返回值:

# function test() { test $*; echo $?; }

当然,当我运行它时,它会递归运行,每次test到达时都会调用自己,因为在函数列表之后会检查内置列表。这是一种将搜索限制为内置的方法吗?例如在它前面加上一些魔术字符串?

标签: bashfunction

解决方案


是的,有恰当命名的魔术字符串,builtin并且command

$ function test() { command test $*; echo $?; }   # Looks for test in PATH.
$ test foo
0
$ test 1 -gt 2
1
$ function test() { builtin test $*; echo $?; }   # Uses builtin.
$ test 1 -gt 0
0

command方式的优点是它是POSIX,而builtin不是。


推荐阅读