Bash Save&从文件加载数组

时间:2018-03-06 14:33:09

标签: bash

我将全局变量数组保存到一个文件中:

declare -p hashTable  > $File
declare -p testArray >> $File

我想将它们加载回全局变量。我正在使用它:

source $File

从全局范围调用时很好,但是当它在函数内时,它会将变量加载回本地。

有没有办法将它们加载到全局变量? 有没有办法用-g选项保存,以便全局加载?

2 个答案:

答案 0 :(得分:2)

在BASH 4.2+上,你可以在你的函数中找到脚本:

delFunc(id , index){
    // console.log("Delete ",id);
    this.add.deleteProd(id).subscribe(()=>{
        this.data.splice(index, 1);
    });
}

fn() { source <(sed 's/^declare -[aA]/&g/' "$File") } # access your array outside the function declare -p testArray 会找到以seddeclare -a开头的行,并将其替换为declare -A,从而使所有数组成为全局。< / p>

答案 1 :(得分:1)

我的两分钱:

有两种方法可以做到这一点:

  1. 使用-g命令的declare参数

    declare -p hashTable testArray | sed 's/ -[aA]/&g/' >$File
    

    Nota:我更喜欢在撰写 sed 时使用$File,而不是在阅读时使用。{/ p>

    fn() { source $File; }
    
  2. 声明全局变量超出了函数范围:

    declare -p hashTable testArray | sed 's/^.* -[aA] //' >$File
    

    然后现在:

    fn() { source $File; }
    declare -A hashTable
    declare -a testArray
    fn
    

    如果关联数组在函数之前声明为,并且在函数范围内未使用declare命令,则可以完成此任务。