在函数中有效使用“源”吗?

在函数中有效使用“源”吗?

就像简介:如果secondary.sh

functionX(){
   ...
}

primary.shsource 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(){
   ...
 }
}

相关内容