Environment variables are a legacy mess: Let's dive deep into them
7 months ago
- #programming
- #linux
- #environment-variables
- 环境变量是软件开发中的传统接口,缺乏命名空间和类型支持。
- 在Linux中,环境变量通过`execve`系统调用从父进程传递给子进程。
- 程序启动时,内核会将环境变量以空终止字符串的形式转储到栈上。
- Bash将环境变量存储在哈希表栈中,支持局部作用域和导出功能。
- Glibc通过动态`environ`数组管理环境变量,操作具有线性时间复杂度。
- Python的`os.environ`基于C库的`environ`数组构建,更新是单向的。
- Linux对环境变量有大小限制:单个变量128 KiB,总量不超过2 MiB。
- POSIX允许应用程序使用小写环境变量,但大写是约定俗成的规范。
- 环境变量名应避免使用'=',采用`^[A-Z_][A-Z0-9_]*$`格式以保证可移植性。
- 变量值应使用UTF-8或POSIX可移植字符集以确保最大兼容性。