![在函数中有效使用“源”吗?](https://linux22.com/image/202508/%E5%9C%A8%E5%87%BD%E6%95%B0%E4%B8%AD%E6%9C%89%E6%95%88%E4%BD%BF%E7%94%A8%E2%80%9C%E6%BA%90%E2%80%9D%E5%90%97%EF%BC%9F.png)
就像简介:如果secondary.sh
有
functionX(){
...
}
并primary.sh
已source secondary.sh
声明 - 及其自己的功能,因此:
# primary.sh content
source secondary.sh
functionA(){
...
}
functionB(){
...
}
按照我的理解是等价的将前者的所有源代码复制并粘贴到后者中。所以:
# primary.sh content
functionX(){
...
}
functionA(){
...
}
functionB(){
...
}
如果有什么不对的地方,请纠正我。
此外,脚本文件是在当前 shell 中执行的,任何更改(例如环境变量)都会影响并反映在当前 shell 中。直到这里我都还好。再次,如果有什么错误,请纠正我。
现在,对于相同的primary.sh
脚本文件,但具有不同的场景 - 如果它具有:
source ${SPECIFIC_PATH}/secondary.sh
functionA(){
...
}
functionB(){
...
}
startPrimary(){
...
SPECIFIC_PATH="/somepath"
...
}
它失败是因为source
它位于顶部但SPECIFIC_PATH
尚未定义而被执行。
但如果改成:
functionA(){
...
}
functionB(){
...
}
startPrimary(){
...
SPECIFIC_PATH="/somepath"
...
source ${SPECIFIC_PATH}/secondary.sh
}
它有效,因为SPECIFIC_PATH
已声明和 source
是按要求执行的。
这里介绍了这种情况 -非常相似:
但是——它有效吗?
我做这个问题是因为我关心的是:
如果secondary.sh
声明了函数并且它们实际上被复制/粘贴到primary.sh
- InUnix/Linux shell 脚本在其他函数中声明函数是否有效?我希望你明白我的观点。我假设正在发生以下情况:
functionA(){
...
}
functionB(){
...
}
startPrimary(){
...
SPECIFIC_PATH="/somepath"
...
functionX(){
...
}
}