Список всех переменных среды в Matlab

Как получить список всех определенных переменных среды в Matlab? Я в курсе getenv но вы должны указать имя, и doc getenv предлагает никакой помощи в том, чтобы использовать его для извлечения элементов любым другим способом. Я не могу найти никакой другой соответствующей информации в интернете. Это вообще возможно?

меня интересует независимый от платформы ответ (или, по крайней мере, Windows и Linux).

2 ответов


Ниже приведена функция, реализующая два способа извлечения всех переменных среды (оба метода являются кросс-платформенными):

  1. использование возможностей Java в MATLAB
  2. использование системных команд (as @sebastian предложил)

Примечание: как @ Nzbuu объяснил в комментариях, используя Java System.getenv() имеет ограничение в том, что он возвращает переменные среды, захваченные в момент запуска процесса MATLAB. Это означает, что любой более поздние изменения, сделанные с setenv в текущем сеансе не будет отражено в выходных данных метода Java. Системный метод от этого не страдает.

getenvall.м

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

пример:

% 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')

можно использовать

system('env')

на linux / mac и

system('set') % hope I remember correctly, no windows at hand

в обоих случаях вам придется проанализировать вывод, хотя, как это происходит в формате variable=<variable-value>.