在全球范围内和功能范围内采购文件有什么区别? 那是在:
之间loadlib ()
{
source "$1.sh"
}
loadlib lib
和
source lib.sh
有什么值得担心的,除了lib.sh中的变量的“本地”声明吗?
这个问题的出发点是注释“#由于我们使用了一些相关的数组,因此该文件应该包含在函数外部。”来自yaourt计划。
git clone http://projects.archlinux.fr/yaourt.git
vim ./yaourt/src/lib/util.sh.in
文档
来自man bash
. filename [arguments]
source filename [arguments]
在当前shell环境中从filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态。如果filename不包含斜杠,则使用PATH中的文件名来查找包含filename的目录。在PATH中搜索的文件不需要是可执行的。当bash不处于posix模式时,如果在PATH中找不到文件,则搜索当前目录。如果关闭shopt内置命令的sourcepath选项,则不搜索PATH。如果提供了任何参数,则在执行文件名时它们将成为位置参数。否则,位置参数不变。返回状态是最后一个命令的状态 在脚本中退出(如果没有执行命令则为0),如果找不到或无法读取文件名则为false。
答案 0 :(得分:0)
bash手册页指出:
在函数及其调用者之间,shell执行环境的所有其他方面都是相同的 除了以下例外:DEBUG和RETURN陷阱(请参阅SHELL下内置的陷阱的描述 除非已为函数赋予trace属性(请参阅下面的BUILTIN COMMANDS),否则不会继承 下面的内置声明的描述)或-o functrace shell选项已启用 内置的set(在这种情况下,所有函数都继承DEBUG和RETURN陷阱),而ERR陷阱为 除非已启用-o errtrace shell选项,否则不会继承。
该函数本地的变量可以使用本地内置命令声明。通常,变量 并且它们的值在函数及其调用者之间共享。
唯一的例外是隐含“局部”变量和位置参数。