如何在我的 bashrc 中创建本地函数?

hug*_*omg 42 bash bashrc

我的 .bashrc 有一些重复的代码,所以我使用了一个函数来简化它

do_stuff() {
  local version=$1
  export FOO_${version}_X="17"
  export FOO_${version}_Y="42"
}

do_stuff '5.1'
do_stuff '5.2'
Run Code Online (Sandbox Code Playgroud)

但是,现在当我使用我的 shell 时,“do_stuff”名称在范围内,因此我可以选项卡完成并运行该函数(可能会弄乱我的环境变量)。有没有办法让“do_stuff”只在 .bashrc 中可见?

cha*_*aos 45

使用unset在你的最后一行.bashrc:

unset -f do_stuff
Run Code Online (Sandbox Code Playgroud)

将删除/取消设置功能do_stuff。

要删除/取消设置变量,请按如下方式调用它:

unset variablename
Run Code Online (Sandbox Code Playgroud)

  • 如果在另一个函数中使用了 `do_stuff`,这将不起作用。当你调用这个函数时,你会得到`bash: do_stuff: command not found`。我知道这不是 op 所说的确切情况,但值得指出。 (10认同)

小智 16

另一种选择是像在其他脚本语言中一样使用下划线来表明您不打算将此函数公开。您输入 _do_foo 的可能性非常小,也不太可能与其他人发生冲突。


Cam*_*tin 5

我能想到的唯一解决方案是强调它并给它一个非常独特的名称,甚至可能像花式裤子语言一样用点命名它(但这在旧版本中不起作用sh)。

哎呀,这不会有任何冲突:

_my_foobar_method_91a3b52d990f4a9f9d5d9423ec37b64c () {
    # Custom proprietary logic protected ID 10 T intellectual property copyright clauses.
    cat <<< `echo $(xargs printf <<< "$1")`; }
}
Run Code Online (Sandbox Code Playgroud)