给定文件m.sh
:
f() {
echo foo
}
g() {
f | sed -r 's/^|$/:/g' # random work
}
和e.sh
:
. m.sh
old_f="$(type f | sed '3,$!d')"
f() {
echo "$(eval "$old_f")bar"
}
g
有没有比使用type
和eval
从覆盖函数调用旧函数更好的解决方案,同时保持相同的名称,以便其他函数中的引用仍然有效?
两者m.sh
和e.sh
都是同一个项目的一部分,所以我们可以m.sh
放心地修改。
我突然想到我可以这样做:
太糟糕了,这需要修改
m.sh
以添加这样的样板,但至少它避免了使用type
andeval
。f()
通过将第一个定义定义为一次,可以避免手动重新定义以增加数量:通过使用这些定义:
这样,
e.sh
只需执行以下操作即可覆盖: