我将全局变量数组保存到一个文件中:
declare -p hashTable > $File
declare -p testArray >> $File
我想将它们加载回全局变量。我正在使用它:
source $File
从全局范围调用时很好,但是当它在函数内时,它会将变量加载回本地。
有没有办法将它们加载到全局变量? 有没有办法用-g选项保存,以便全局加载?
答案 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
会找到以sed
或declare -a
开头的行,并将其替换为declare -A
,从而使所有数组成为全局。< / p>
答案 1 :(得分:1)
有两种方法可以做到这一点:
使用-g
命令的declare
参数
declare -p hashTable testArray | sed 's/ -[aA]/&g/' >$File
Nota:我更喜欢在撰写 sed
时使用$File
,而不是在阅读时使用。{/ p>
fn() { source $File; }
声明全局变量超出了函数范围:
declare -p hashTable testArray | sed 's/^.* -[aA] //' >$File
然后现在:
fn() { source $File; }
declare -A hashTable
declare -a testArray
fn
如果关联数组在函数之前声明为,并且在函数范围内未使用declare
命令,则可以完成此任务。