首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用getenv函数

使用getenv函数
EN

Stack Overflow用户
提问于 2011-03-23 16:06:22
回答 3查看 4.7K关注 0票数 2

我有一个C程序,它打印每个环境变量,其名称由stdin给出。它打印$PATH、$USER等变量,但看不到我自己在Linux shell中定义的环境变量……例如,在bash中我定义了my=4,当我输入"my“时,我希望程序返回4。

代码语言:javascript
复制
int main  () {
  char * key = (char * )malloc(30);

  scanf("%s", key);

  if(getenv(key) != NULL)
    printf("%s\n", getenv(key));
  else
    printf("NULL\n");

  return 0;
}

我能做些什么来提高getenv的结果?我想让它显示所有的环境变量以及从Linux shell继承的所有内容。谢谢。。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-23 16:09:30

有几种方法:

  1. my=4; export my; ./program
  2. my=4 ./program
  3. env my=4 ./program

这些方法中的每一种都有相同的效果,但机制不同。

  1. 此方法特定于您正在使用的shell,尽管它在大多数典型shell中的工作方式如下(Bourne shell变体;csh派生的shell也是不同的)。这首先设置一个shell变量,然后将其导出到一个环境变量,然后运行您的程序。在某些shells中,您可以将其缩写为export my=4。这个变量在你的程序运行后保持不变。
  2. 这个方法也依赖于你的外壳。这会为./program的执行临时设置my环境变量。运行后,my不存在(或具有其原始值)。
  3. 在运行程序之前使用env程序设置环境变量。这个方法不依赖于任何特定的shell,并且是最可移植的。与方法2类似,此方法临时设置环境变量。事实上,shell甚至不知道my已经设置。
票数 6
EN

Stack Overflow用户

发布于 2011-03-23 16:08:04

如果你没有export它,那么它只是一个外壳变量,而不是环境变量。使用export my=4my=4; export my

票数 4
EN

Stack Overflow用户

发布于 2011-03-23 16:08:22

这与C或getenv无关。如果您在shell中执行my=4,那么您已经定义了一个本地shell变量。要使其成为环境变量,请执行export my

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5402355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档