我想以自动方式安装一些软件包,而我正在尝试使用简单的for循环。如下所示。
pkgs = '../pkgs';
names = dir(fullfile(pkgs, '*.tar.gz'));
n = numel(nomes);
for i = 1:n
pkg install names(n).name
end
这是第一次尝试8次返回给我
warning: file names(n).name does not exist
我正在寻找一种方法来获取names.name的ans
值。
答案 0 :(得分:3)
您可以使用' glob()'而不是所有代码。获取tarball列表,然后单个pkg()
调用来安装所有这些。像这样:
fpaths = glob ("pkgs/*.tar.gz");
pkg ("install", fpaths{:});
答案 1 :(得分:1)
MATLAB和Octave都允许使用
的简单语法functionname arg1 arg2 ...
将其翻译为正确的函数调用
functionname('arg1','arg2',...);
这意味着为了将变量的值作为参数传递(而不是变量 names 本身),您必须使用函数形式:
pkgs = '../pkgs';
names = dir(fullfile(pkgs, '*.tar.gz'));
n = numel(names); %// fixed your typo here
for k = 1:n
pkg('install',names(k).name) %// changed here, also n -> i -> k
end
请注意,您有两个拼写错误:{3}在第3行(可能是翻译问题)中写为names
,更重要的是,您使用nomes
而不是{{1 }} 在循环。事实上,不要在{8}中使用n
作为变量:这代表虚构单位,如果你不谨慎,可能会导致细微的错误。我在上面的代码中更改为i
。