7.9环境变量如同前述,环境字符串的形式是:name=value。UNIX内核并不关心这种字符串的意义,它们的解释完全取决于各个应用程序。shell使用了大量的环境变量。其中某一些在登录时自动设置(如HOME,USER等),有些则由用户设置。我们通常在一个shell起动文件中设置环境变量以控制shell的动作。若设置了环境变量MAILPATH,则它告诉Bourne shell和Korn Shell到哪里去查看邮件。你可能想进一步了解关于UNIX POSIX API的细节?

ANSI C定义了一个函数getenv,可以用其取环境变量值,但是该标准又称环境的内容是由实现定义的。


#include <stdlib.h>



char *getenv(const char *name);



返回:指向与name关联的value的指针,若未找到则为NULL。注意,此函数返回一个指针,它指向name=value字符串中的value。我们应当使用getenv从环境中取一个环境变量的值,而不是直接存取environ。

</stdlib.h>

如果你还不清楚什么是POSIX,或是对Shell编程感兴趣,看看这篇Unix shell编程的文章,它提供了很多有用的信息。

POSIX . 1和XPG 3定义了某些环境变量。表7-1列出了由这两个标准定义并受到SVR 4和4.3+BSD支持的环境变量。SVR 4和4.3+BSD还使用了很多依赖于实现的环境变量。FIPS 151-1要求登录shell必须要定义环境变量HOME和LOGNAME。

| 变量 | 标准 | 实现说明 |

|------------|-----------|-----------------------|

| | POSIX . 1 | XPG 3 | SVR 4 | 4.3+BSD |

| HOME | • | • | 起始目录 |

| LANG | • | • | • | 本地名 |

| LC_ALL | • | • | • | 本地名 |

| LC_COLLATE | • | • | • | 本地排序名 |

| LC_CTYPE | • | • | • | 本地字符分类名 |

| LC_MONETARY| • | • | • | 本地货币编辑名 |

| LC_NUMERIC | • | • | • | 本地数字编辑名 |

| LC_TIME | • | • | • | 本地日期/时间格式名|

| LOGNAME | • | • | 登录名 |

| NLSPATH | • | 消息类模板序列 |

| PATH | • | 搜索可执行文件的路径前缀表 |

| TERM | • | 终端类型 |

| TZ | • | 时区信息 |

想要更深入了解这些环境变量及其在实际中的应用?不妨看看Unix shell by Example这本书,它对初学者非常友好,解释了很多复杂的概念。你一定会对UNIX环境变量有更深入的理解。