Bash 函数局部数组变量在被调用的地方不可访问

ras*_*hok 2 linux bash shell

有一个 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) infunca.sh. 但是局部变量var_a是可以访问的。

Bar*_*mar 5

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)

在函数内部,它本来就是本地的。