使用getenv函数

sha*_*aku 2 c shell getenv

我有一个C程序打印每个环境变量,其名称由stdin给出.它打印变量,如$ PATH,$ USER,但它没有看到我在Linux shell中定义的环境变量...例如,在bash中我定义了我的= 4,并且我希望程序返回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;
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来改善getenv的结果?我想让它向我展示所有环境变量以及Linux shell的所有继承.谢谢..

Gre*_*ill 6

有两种方法:

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

这些方法中的每一种都具有相同的效果,但是通过不同的机制.

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

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

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