有一个 2 bash 脚本文件。b.sh下面提到第一个文件。
#!/bin/bash
declare -a arr1=()
func() {
var_a=12
arr1[0]=20
arr1[1]=30
declare -a arr2=()
arr2[0]=40
arr2[1]=50
}
Run Code Online (Sandbox Code Playgroud)
a.sh下面提到了第二个文件。
#!/bin/bash
source b.sh
func
echo $var_a
echo ${arr1[1]}
echo ${arr2[1]}
Run Code Online (Sandbox Code Playgroud)
输出是
12
30
Run Code Online (Sandbox Code Playgroud)
我的疑问是,为什么本地数组变量 ( arr2) infunc在a.sh. 但是局部变量var_a是可以访问的。
arr2是一个局部变量,因为它是使用declare. 如Bash 手册所述:
在函数中使用时,
declare将每个名称设为本地名称,与local命令一样,除非使用该-g选项。
由于您没有创建var_awith declare,赋值创建了一个全局变量,因此它可以在函数之外访问。如果你写:
declare var_a=12
Run Code Online (Sandbox Code Playgroud)
或者
local var_a=12
Run Code Online (Sandbox Code Playgroud)
在函数内部,它本来就是本地的。