有人能解释一下为什么我可以使用下面的代码扩展
输出结果如下:
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
getenv
访问,但是 Bash 允许通过 $var 语法访问它。 - user2100815