我正在使用 Bash 4.4.20。我通常在每个 bashscript 中都有 main 函数。如果我想从另一个 bash 脚本中的另一个函数获取这个脚本,这会与两个脚本中的主函数定义冲突吗?
#A.sh
main() {
SomeFunction
}
SomeFunction(){
. B.sh
}
main "$@"
#B.sh
main(){
echo Hi
}
main "$@"
有没有不重命名主要功能的解决方案?
我正在使用 Bash 4.4.20。我通常在每个 bashscript 中都有 main 函数。如果我想从另一个 bash 脚本中的另一个函数获取这个脚本,这会与两个脚本中的主函数定义冲突吗?
#A.sh
main() {
SomeFunction
}
SomeFunction(){
. B.sh
}
main "$@"
#B.sh
main(){
echo Hi
}
main "$@"
有没有不重命名主要功能的解决方案?
另一个脚本将重新定义
main()
,是的。尽管在这种特殊情况下,我不确定它是否重要,因为main()
当脚本 B 重新定义函数时,脚本 A 正在运行。我怀疑 shell 是否允许重新定义来改变已经运行的函数的行为。也就是说,给定这些脚本:
使用任何外壳运行我可以找到
a.sh
打印a1
,,,b
。a2
如果a.sh
要再次调用main
,那么它当然会得到新的行为。但即使在这里无关紧要,像这样动态地重新定义函数至少会让人感到困惑。
更好的问题是,为什么首先需要获取脚本B?将 B 作为要通过源代码加载的函数集合、各种库,这似乎更清楚;或将其作为一个独立的实用程序,称为常规程序,而不是来源。
在第一种情况下,A 将根据需要显式调用 A 中定义的函数。
简短回答 是的
长答案 如果您获取脚本,它与执行脚本相同,但在您自己的 shell 进程中。因此环境变量、函数名等是共享的。见https://superuser.com/a/176788/222230