c++ - 在 C++ 程序中找不到环境变量 UID

标签 c++ bash g++ environment-variables

谁能解释为什么我可以用下面的代码扩展 PATH 但不能扩展 UID:

#include <iostream>
#include <string>
#include <regex>

std::string ExpandEnvironmentVariables(std::string path)
{
    static std::regex env("\\$\\{([^}]+)\\}");
    std::smatch match;
    while (std::regex_search(path, match, env))
    {
        const char * s = getenv(match[1].str().c_str());
        const std::string var(s == NULL ? "(empty)" : s);
        path.replace(match[0].first, match[0].second, var);
    }

    return path;
}

int main(int argc, char* argv[])
{
    std::string UID = "${UID}";
    std::cout << UID << " ==> " << ExpandEnvironmentVariables(UID) <<  std::endl;

    std::string PATH = "${PATH}";
    std::cout << PATH << " ==> " << ExpandEnvironmentVariables(PATH) <<  std::endl;

    return 0;
}

输出是:

./ExpandEnvironmentVariables
${UID} ==> (empty)
${PATH} ==> /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

bash 中存在 UID 变量:

echo $UID
1000

最佳答案

并非所有 shell 变量都在 bash 中导出。您可以像这样检查 shell 变量状态:

$ declare -p UID
declare -ir UID="1000"

这意味着该变量具有整数属性(-i)并且它是只读的-r)。导出的变量如下所示:

$ declare -p PATH
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

-x表示变量被导出并添加到子进程的进程环境中。

关于c++ - 在 C++ 程序中找不到环境变量 UID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50900432/

相关文章:

c++ - 将 MinGW 从 4.4.1 更新到 4.7.1 后,SFML 项目将无法运行

c++ - C++动态加载简介

c++ - 错误 C2664 : 'send' : cannot convert parameter 2 from 'ServerGreeting' to 'const char *'

c - 通过 shell 命令获取 C 应用程序的参数

bash - 如何遍历子目录中的文件?

c++ - clang++ 默认参数或配置文件

c++ - 初始化稀疏静态数组

c++ - nm 报告的未解析符号

linux - sed 命令插入文本 - bash

c++ - g++ 给出错误 : ‘node* link’ redeclared as different kind of symbol