我有一个字符串存储在一个被读入字符串的文件中。 我希望将* nix shell格式中定义的变量替换为相应的环境值。
例如,$DEPLOY=/home/user
的环境变量会将"deploypath=$DEPLOY/dir1"
变为"deploypath=/home/user/dir1"
是否有一个简单的库来执行此操作?
即
#include "supersimplelib.h"
char *newstr = expandvars(oldstr);
(或类似)
我知道我可以使用正则表达式lib,然后调用getenv()
,但我想知道是否还有其他更简单的方法?
它只能在Linux下编译。
答案 0 :(得分:7)
wordexp似乎可以满足您的需求。以下是来自this manpage的示例程序的修改版本(它还提供了很多关于wordexp的详细信息)。
#include <stdio.h>
#include <wordexp.h>
int main(int argc, char **argv) {
wordexp_t p;
char **w;
int i;
wordexp("This is my path: $PATH", &p, 0);
w = p.we_wordv;
for (i=0; i<p.we_wordc; i++)
printf("%s ", w[i]);
printf("\n");
wordfree(&p);
return 0;
}
这会在我的机器上产生以下输出(Ubuntu Linux 10.04,使用gcc编译)。
$ ./a.out
This is my path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
我发现上面的联机帮助页最有用,但GNU C Library Reference Manual还提供了更多信息。