2014-03-06 54 views
1

我想在命令行上评估一个MATLAB表达式。我写了类似用matlab不扩展glob -r

$ matlab -nojvm -r "disp(1 + 2); exit" 

这打印一些启动样板,然后3,然后把我带回壳。问题是,如果表达式中有一个*,它看起来像MATLAB总是扩展它 - 如果我写1 * 2而不是1 + 2,我得到一个Unexpected MATLAB expression错误,因为*被替换为当前文件的空格分隔列表目录。

我试过用反斜杠以某种方式转义,或者在eval中包装表达式,但*甚至在字符串内扩展。我很确定这是MATLAB做扩展,而不是外壳。

有没有办法解决这个问题?或者正在评估任意表达式而不是matlab -r的预期用途?如果是这样,有没有更好的方法来做到这一点?

+0

我想你会需要把这些表达式放在m文件中的某个函数中,然后执行这个函数。 – Marcin

回答

0

最后我做这样的事情

echo -e "function my_entry_point\n$expr\nend" >> my_entry_point.m 
matlab -nojvm -r "my_entry_point(); exit" 
0

的*是由外壳扩展,而不是由MATLAB。如果您在单引号的语句,将工作

matlab -nojvm -r 'disp(1 * 2); exit' 

对于更复杂的脚本,执行文件的马辛的想法可能是一个更好的办法,但。

+0

你有试过吗?甚至用单引号扩展'*',这就是为什么我说我非常肯定MATLAB正在进行扩展。 –