Answers:
使用unset
在你的最后一行.bashrc
:
unset -f do_stuff
将删除/取消设置功能do_stuff
。
要删除/取消设置变量,请按以下方式调用它:
unset variablename
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
。
do_stuff
在另一个函数中使用,则无法使用。调用该函数时,您将得到bash: do_stuff: command not found
。我知道这不是操作人员正在谈论的确切情况,但值得指出。
另一个选择是像其他脚本语言一样使用下划线表示您不打算将此功能公开。您输入_do_foo的可能性很小,并且也不太可能与其他任何人发生冲突。
如注释中所建议,您可以使用子外壳:
#!/bin/bash
. <(
do_stuff() {
local version="$1" valid='^\w+$'
[[ "$version" =~ $valid ]] &&
cat <<SIDE || echo "$FUNCNAME: invalid '$version'" >&2
export FOO_${version}_X=17
export FOO_${version}_Y=42
SIDE
}
do_stuff 5.0 # FOO_5.0_X is "not a valid identifier"
do_stuff 5_1
do_stuff 5_2
)
do_keep() { :; } # just get sure the report below actually works
set | egrep '(do_|FOO_)' | sed -e 's,^,set:\x09,'
我们在subshell标准输出上构建了另一个脚本,以实现我们想要的唯一副作用(使用here
document <<SIDE
)。然后,我们使用.
。
“ mise en abime”的力量sh
令人惊讶。
()
来创建子外壳。对于简单情况,另一种可能性是使用for version in 5.1 5.2
循环,尽管这可以让它version
逃脱。