在C中是否有Python的expandvars等价物?

我有一个string存储在一个文件被读入一个string。 我希望用相应的环境值replace* nix shell格式中定义的variables。

例如, $DEPLOY=/home/user环境variables会将"deploypath=$DEPLOY/dir1"变成"deploypath=/home/user/dir1"

有一个简单的库来做到这一点?

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

(或类似)

我知道我可以使用正则expression式库,然后调用getenv()但我想知道是否有另一种更简单的方法?

它只会在Linux下编译。

wordexp似乎做你所需要的。 这里是一个从这个手册页的示例程序的修改版本(这也给了很多关于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库参考手册也提供了更多的信息。