面临一个我找不到答案的问题。为了举例,我将问题简化为更简单的版本:
我有一个名为的文件datasource
,其内容如下:
$ cat datasource
declare X="Hello, world"
$
函数 foo 声明为:
$ function foo( ) {
. ./datasource
}
当我从当前上下文中获取数据源时,X 被声明;当我通过 foo 执行此操作时,则没有。
$ # next result is expected
$ unset X
$ declare -p X
bash: declare: X: not found
$
$ # next result is expected
$ . ./datasource
$ declare -p X
declare -- X="Hello, world"
$
$ # next result is NOT expected
$ unset X
$ foo
$ declare -p X
bash: declare: X: not found
$
知道为什么吗?
我正在运行 Ubuntu LTS 18.04 和 bash 5.0.17
答案1
您需要使用declare -g
来使变量成为全局变量。help declare
说:
在函数中使用时,宣布使 NAME 本地化,就像当地的 命令。此
-g
选项可抑制此行为。