列出Matlab中的所有环境变量

pat*_*cek 11 matlab environment-variables

如何在Matlab中获取所有已定义环境变量的列表?我知道getenv但你必须提供一个名称,并且doc getenv没有提供如何使用它以任何其他方式检索项目的帮助.我在网上找不到任何其他相关信息.这甚至可能吗?

我对平台无关的答案(或至少是Windows和Linux)感兴趣.

seb*_*ian 8

你可以用

system('env')
Run Code Online (Sandbox Code Playgroud)

在linux/mac上,和

system('set') % hope I remember correctly, no windows at hand
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,你都必须解析输出,因为它有格式variable=<variable-value>.

  • 然后,您也可以在MATLAB控制台窗口中使用`!env`。就像其他提示一样。 (2认同)

Amr*_*mro 5

下面是一个函数,它实现了两种检索所有环境变量的方法(两种方法都是跨平台的):

  1. 在MATLAB中使用Java功能
  2. 使用特定于系统的命令(如@sebastian建议的那样)

注意:正如@Nzbuu在评论中解释的那样,使用Java System.getenv()有一个限制,即它返回在MATLAB过程开始时捕获的环境变量.这意味着setenv在当前会话中进行的任何后续更改都不会反映在Java方法的输出中.基于系统的方法不会受此影响.

getenvall.m

function [keys,vals] = getenvall(method)
    if nargin < 1, method = 'system'; end
    method = validatestring(method, {'java', 'system'});

    switch method
        case 'java'
            map = java.lang.System.getenv();  % returns a Java map
            keys = cell(map.keySet.toArray());
            vals = cell(map.values.toArray());
        case 'system'
            if ispc()
                %cmd = 'set "';  %HACK for hidden variables
                cmd = 'set';
            else
                cmd = 'env';
            end
            [~,out] = system(cmd);
            vars = regexp(strtrim(out), '^(.*)=(.*)$', ...
                'tokens', 'lineanchors', 'dotexceptnewline');
            vars = vertcat(vars{:});
            keys = vars(:,1);
            vals = vars(:,2);
    end

    % Windows environment variables are case-insensitive
    if ispc()
        keys = upper(keys);
    end

    % sort alphabetically
    [keys,ord] = sort(keys);
    vals = vals(ord);
end
Run Code Online (Sandbox Code Playgroud)

例:

% retrieve all environment variables and print them
[keys,vals] = getenvall();
cellfun(@(k,v) fprintf('%s=%s\n',k,v), keys, vals);

% for convenience, we can build a MATLAB map or a table
m = containers.Map(keys, vals);
t = table(keys, vals);

% access some variable by name
disp(m('OS'))   % similar to getenv('OS')
Run Code Online (Sandbox Code Playgroud)