【问题标题】:Is there an equivalent to Python's expandvars in C?在 C 中是否有与 Python 的 expandvars 等价的东西?
【发布时间】:2011-09-25 14:36:25
【问题描述】:

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

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

有没有一个简单的库可以做到这一点?

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

(或类似的)

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

它只会在Linux下编译。

【问题讨论】:

  • 我可以或应该回答我自己的问题吗?我找到了这个wordexp,这就是我所追求的。
  • 是的,您可以(并且应该)。请参阅FAQ
  • 我不能再等 7 个小时 :) 所以我会用这个评论来代替我的答案:我找到了这个,这就是我在 wordexp 之后的问题 我还发现了一个相关的问题,它也有相同的回答。 link
  • 在您发布此内容时正在写我的答案...
  • FWIW,Windows 有 ExpandEnvironmentStrings 功能可以做到这一点,但它不是可移植的。

标签: c linux environment-variables


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2023-03-07
    • 2018-05-26
    • 2014-10-14
    相关资源
    最近更新 更多