在调用的地方无法访问Bash函数局部数组变量

时间:2018-01-25 19:56:06

标签: 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
}

下面提到了第二个文件a.sh

#!/bin/bash
source b.sh
func
echo $var_a
echo ${arr1[1]}
echo ${arr2[1]}

输出

12
30

我怀疑的是,arr2中无法访问func中的本地数组变量(a.sh)。但是可以访问局部变量var_a

1 个答案:

答案 0 :(得分:4)

arr2是一个局部变量,因为它是使用declare创建的。如Bash Manual中所述:

  

在函数中使用时,declare使每个名称都是本地名称,与local命令一样,除非使用-g选项。

由于您未使用var_a创建declare,因此分配会创建一个全局变量,因此可以在功能之外访问它。如果你写了:

declare var_a=12

local var_a=12

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