在Matlab中保存全局变量

时间:2014-10-17 12:45:47

标签: matlab

在Matlab中,当一个变量声明为全局并使用save()命令保存它时,该变量在新会话中加载.mat文件后也是全局的。以下代码显示了此行为:

一开始,我没有变数:

>> who
>> who global

然后,我创建全局变量并保存它:

>> global settings
>> settings.test = 1;
>> who

Your variables are:

settings  

>> who global

Your variables are:

settings  

>> save('test.mat','settings');

之后我清除了工作空间和全局变量(或者开始一个新的Matlab会话)

>> clear
>> clearvars -global
>> who
>> who global

当我加载.mat文件时,该变量再次标记为全局,即使我现在没有指定它。

>> load test.mat
>> who

Your variables are:

settings  

>> who global

Your variables are:

settings  

>> clear
>> who
>> who global

Your variables are:

settings

有什么方法可以阻止这种行为吗?

在我看来,"全球" flag随变量一起保存。这真的有用吗?假设有人向我发送了一个包含数据的mat文件,其中变量被声明为全局变量。即使在函数中加载此文件,它也会在我的完整会话中传播数据。对我来说,这使得Matlab代码非常容易受到攻击。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

Dan在评论中指出,将包含全局变量的mat文件加载到结构中会剥离全局属性。

foo = load('settings.mat'); 

要解决全局问题,对其余代码产生影响最小,生成和使用settings.mat文件的代码,您可以提取所需的字段:

foo = load('settings.mat');
settings = foo.settings;

这两者都删除了全局属性,并声明了设置变量的来源。 (这在以后执行不可避免的代码考古时确实有帮助。)