使用getenv函数

时间:2011-03-23 08:06:22

标签: c shell getenv

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

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的所有继承。 谢谢..

3 个答案:

答案 0 :(得分:6)

有几种方法:

  1. my=4; export my; ./program
  2. my=4 ./program
  3. env my=4 ./program
  4. 这些方法中的每一种都具有相同的效果,但是通过不同的机制。

    1. 此方法特定于您正在使用的shell,尽管它在大多数典型的shell中都是这样的(Bourne shell变体; csh派生的shell再次不同)。首先设置 shell变量,然后将其导出到环境变量,然后运行您的程序。在某些shell上,您可以将其缩写为export my=4。程序运行后,变量仍然保持设置。

    2. 此方法还取决于您的shell。这会为my的执行设置./program环境变量暂时。运行后,my不存在(或具有原始值)。

    3. 这使用env程序在运行程序之前设置环境变量。此方法依赖于任何特定的shell,并且是最便携的。与方法2类似,这会临时设置环境变量。事实上,shell甚至都不知道my已被设置。

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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