是否可以使用多个命令行参数运行matlab函数?

我想编写一个在matlab中运行多个测试的脚本。 首先,我运行:

TestsPath=$(find . -path "Tests")

哪个返回:

a/b/Tests/ b/c/Tests/ c/d/Tests/

然后我尝试启动matlab并将其传递(目前仅打印它们)

matlab -nosplash -nodesktop -r "run(RunAllTests(${TestsPath}));"

我的matlab函数如下:

function [] = RunAllTests(varargin)
    for i=1:nargin
        disp(varargin{i});
    end
end  

但是这个

  run(a/b/Tests
  |

Error: This statement is incomplete.

因此,当谈到第一个空白时,它似乎破裂了。

可以这样做吗?

fightgod100_01 回答:是否可以使用多个命令行参数运行matlab函数?

是的,您需要在函数参数之间使用逗号,将其用单引号引起来,以便matlab将其视为字符串,并且不需要运行。

TestsPath="'a/b/Tests/','b/c/Tests/','c/d/Tests/'"
matlab -nosplash -nodesktop -r "RunAllTests(${TestsPath})"

如果您不想在参数之间添加逗号,则可以将TestsPath作为单个字符串传递,并在matlab中将其拆分为多个参数。

TestsPath="'a/b/Tests/ b/c/Tests/ c/d/Tests/'"
matlab -nosplash -nodesktop -r "RunAllTests(strsplit(${TestsPath}))"
,

如果您的路径中没有空格,则应执行以下操作:

matlab -nosplash -nodesktop -r "RunAllTests ${TestsPath}"

使用您的示例,与在Matlab中运行以下示例相同:

RunAllTests a/b/Tests/ b/c/Tests/ c/d/Tests/

这将在您的函数中产生varargin = {'a/b/Tests/','c/d/Tests/'}。以这种方式传递给函数的每个参数都被视为一个字符数组。

,

您可以使用-printf的{​​{1}}操作确保文件名用引号引起来:

find

这将返回

TestsPath=$(find . -path "Tests" -printf "'%p' ")

可以按照command syntax的建议替换成MATLAB Alex函数调用:

'a/b/Tests/' 'b/c/Tests/' 'c/d/Tests/' 

请注意,如果目录名称中有空格,则需要使用这些引号。


请注意,自MATLAB R2019b起,不推荐使用matlab -nosplash -nodesktop -r "RunAllTests ${TestsPath};" ,而推荐使用新的-r命令行选项:

-batch

这在所有平台(包括Windows!)上均相同。

本文链接:https://www.f2er.com/3146134.html

大家都在问