MATLAB - "clear -except a" 只删除一个

MATLAB - "clear -except a" only deletes a

我到处都看到它说表达式 clear -except a 应该清除除 a 之外的所有变量。但是,如果我尝试它(MATLAB R2014a,在 Linux Mint 17 Cinnamon 64 位上运行),matlab 仅清除变量 a(“-except a”显示为紫色,显然被处理为一个字符串)。我尝试了 clear('-except a'),它没有做任何事情,而 'clear - except a' - 在“-”和 "except" 之间有一个 space,这会导致错误(参数太多)。

我做错了什么?

[编辑]

这是我为 clearvars:

获得的完整错误
EDU>> a = 5;
EDU>> clearvars -except a;
Error using strjoin (line 14)
Expected input to be one of these types:

char

Instead its type was cell.

Error in clearvars>createPattern (line 187)
    pattern = sprintf('(%s)$', strjoin(variableArgs, '|'));

Error in clearvars (line 76)
    exceptVarPat = sprintf('(?!%s)', createPattern(exceptVarArgs, flags.regexpExcept));

问题的发生是由于 PropertyGrid 包中名为 "strjoin.m" 的文件(我作为 BCILab 的依赖项,SIFT 中的外部包,EEGLAB 的插件)。由于 function precedence order in MATLAB,调用了此函数而不是 matlab/toolbox/strfun/strjoin.m 中的函数。重命名插件文件解决了问题。

(尽管我不确定这是否是最佳解决方案,因为它可能会在 PropertyGrid 调用 strjoin 时带来未来错误的可能性。在这种情况下,我认为我会没事的,但评论在类似情况下的最佳方法将不胜感激。

或者您也可以为此使用正则表达式。例如,如果您有包含单词 "path" 的变量,您可以通过调用

清除所有变量,排除那些变量
clear -regexp ^((?!path).)*$; % do not clear paths