gpt4 book ai didi

bash - 函数范围内源文件的缺陷

转载 作者:行者123 更新时间:2023-11-29 09:06:31 26 4
gpt4 key购买 nike

全局范围和函数范围的源文件有什么区别?
那是介于:

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

loadlib lib

source lib.sh

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

这个问题的起点是注释“# Since we use some associated arrays, this file should be included from outside a function.”来自你的程序。
git 克隆 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。

最佳答案

bash 手册页指出:

All other aspects of the shell execution environment are identical between a function and its caller with these exceptions: the DEBUG and RETURN traps (see the description of the trap builtin under SHELL BUILTIN COMMANDS below) are not inherited unless the function has been given the trace attribute (see the description of the declare builtin below) or the -o functrace shell option has been enabled with the set builtin (in which case all functions inherit the DEBUG and RETURN traps), and the ERR trap is not inherited unless the -o errtrace shell option has been enabled.

Variables local to the function may be declared with the local builtin command. Ordinarily, variables and their values are shared between the function and its caller.

暗示“本地”变量和位置参数是唯一的异常(exception)。

关于bash - 函数范围内源文件的缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com