c++ - 在 C++ 程序中找不到环境变量 UID
问题描述
有人可以解释为什么我可以扩展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
意味着变量被导出并添加到子流程的流程环境中。
推荐阅读
- python - 异步使用时 Ansible 失败
- big-o - 如果我在 for 循环中的终止语句是 i < n * n ,那么我的运行时间是 O(n^2) 吗?
- python - 当 df 只有 1 行时,使用 np.column_stack 创建数据框
- java - 此代码的答案对于每个输入都是错误的,无论它是正确还是错误
- java - 为什么在这个树遍历中只有 log(N) 递归调用?
- image - 如何在mac上压缩(调整大小?)> 60k图像?
- javascript - 嵌套for循环功能
- python - 如果另一行具有特定值,如何计算 csv 文件行中字符串的出现次数?
- audio - Unable to play .aac extension audio file using media source extension.API
- django - 在 Django 模板中显示列表的固定长度子集