列出Matlab中的所有环境变量

时间:2013-11-15 15:47:29

标签: matlab environment-variables

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

我对独立于平台的答案感兴趣(或者至少是Windows和Linux)。

2 个答案:

答案 0 :(得分:7)

您可以使用

system('env')

在linux / mac上,

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

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

答案 1 :(得分:5)

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

  1. 在MATLAB中使用Java功能
  2. 使用特定于系统的命令(建议@sebastian
  3. 注意:正如@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
    

    示例:

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