谁能解释为什么我可以用下面的代码扩展 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/