如何在Bash中向用户隐藏私有函数(无需取消设置函数)?
解决方案
可以通过将__hey定义为super_tools的局部函数来实现,这样外部终端无法直接访问__hey,用户只能通过super_tools hey调用对应的功能,且无需取消设置函数。
修改后的代码如下:
super_tools() { # 定义仅在super_tools内部可见的局部函数__hey __hey() { echo "hey" } case "$1" in "hey") __hey ;; *) echo "Invalid argument: $1" ;; esac # 可选:清除局部函数,避免多次调用super_tools时出现重复定义的警告 unset -f __hey }
原理说明
- 在Bash中,函数内部定义的函数作用域仅限于当前函数的执行周期,外部终端无法直接访问。当
super_tools执行完毕后,内部的__hey会被自动销毁(或通过unset -f主动清除)。 - 测试验证:在终端中执行
declare -f查看所有函数,只会显示super_tools,无法找到__hey;只有通过super_tools hey才能触发对应的输出。
内容的提问来源于stack exchange,提问作者Bartek Lachowicz
相关产品推荐
相关产品推荐

