在C中是否有类似于Python的expandvars?

时间:2011-06-30 00:32:47

标签: c linux environment-variables

我有一个字符串存储在一个被读入字符串的文件中。 我希望将* nix shell格式中定义的变量替换为相应的环境值。

例如,$DEPLOY=/home/user的环境变量会将"deploypath=$DEPLOY/dir1"变为"deploypath=/home/user/dir1"

是否有一个简单的库来执行此操作?

#include "supersimplelib.h"
char *newstr = expandvars(oldstr);

(或类似)

我知道我可以使用正则表达式lib,然后调用getenv(),但我想知道是否还有其他更简单的方法?

它只能在Linux下编译。

1 个答案:

答案 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还提供了更多信息。