我有一个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库参考手册也提供了更多的信息。