功能范围中采购文件的陷阱

dim*_*hus 5 bash

在全局范围和功能范围中采购文件有什么区别?
介于:

loadlib ()
{
   source "$1.sh"
}

loadlib lib
Run Code Online (Sandbox Code Playgroud)

source lib.sh
Run Code Online (Sandbox Code Playgroud)

除了lib.sh中变量的“本地”声明之外,还有什么需要担心的吗?

这个问题的起点是注释“#由于我们使用了一些关联的数组,因此应该从函数外部包含此文件。” 来自yaourt程序。
git clone http://projects.archlinux.fr/yaourt.git
vim ./yaourt/src/lib/util.sh.in


来自bash的 文档

.  filename [arguments]  
source filename [arguments]  
Run Code Online (Sandbox Code Playgroud)

在当前Shell环境中从文件名读取并执行命令,并返回从文件名执行的最后一条命令的退出状态。如果filename不包含斜杠,则PATH中的文件名用于查找包含filename的目录。在PATH中搜索的文件不必是可执行的。当bash不在posix模式下时,如果在PATH中找不到文件,则搜索当前目录。如果shopt内置命令的sourcepath选项已关闭,则不会搜索PATH。如果提供了任何参数,则在执行文件名时它们将成为位置参数。否则,位置参数将保持不变。返回状态是脚本中退出的最后一条命令的状态(如果未执行任何命令,则为0),如果找不到或无法读取文件名,则为false。

das*_*h-o 1

bash 手册页指出:

shell 执行环境的所有其他方面在函数及其调用者之间都是相同的,但有以下例外:DEBUG 和 RETURN 陷阱(请参阅下面的 SHELL BUILTIN COMMANDS 下内置陷阱的描述)不会被继承,除非函数已被给予跟踪属性(请参阅下面的声明内置函数的描述)或已使用 set 内置函数启用了 -o functrace shell 选项(在这种情况下,所有函数都会继承 DEBUG 和 RETURN 陷阱),并且不会继承 ERR 陷阱,除非 -o errtrace shell 选项已启用。

函数的局部变量可以使用 local 内置命令来声明。通常,变量及其值在函数及其调用者之间共享。

这意味着“局部”变量和位置参数是唯一的例外。