Ch 25: std::env - 环境与环境变量
std::env模块提供了访问程序运行环境的接口,包括命令行参数、环境变量、当前目录等重要信息。
2. 命令行参数
Section titled “2. 命令行参数”std::env::args()返回命令行参数的迭代器:
use std::env;
fn main() { for (index, arg) in env::args().enumerate() { println!("参数{}: {}", index, arg); }}方法签名:
pub fn args() -> Argspub fn args_os() -> ArgsOsargs()- 返回Unicode字符串迭代器args_os()- 返回操作系统原始字符串(处理非UTF-8路径)
3. 环境变量
Section titled “3. 环境变量”std::env::var()和std::env::vars()访问环境变量:
use std::env;
fn main() { // 获取单个环境变量 if let Ok(home) = env::var("HOME") { println!("HOME = {}", home); }
// 遍历所有环境变量 for (key, value) in env::vars() { println!("{} = {}", key, value); }}方法签名:
pub fn var(key: &str) -> Result<String, VarError>pub fn vars() -> Varspub fn vars_os() -> VarsOs4. 常用环境操作
Section titled “4. 常用环境操作”use std::env;
fn main() { // 获取HOME目录 if let Some(home) = env::home_dir() { println!("Home: {:?}", home); }
// 获取当前目录 if let Ok(cwd) = env::current_dir() { println!("Current dir: {:?}", cwd); }
// 获取可执行文件路径 if let Ok(exe) = env::current_exe() { println!("Exe: {:?}", exe); }}方法签名:
pub fn home_dir() -> Option<PathBuf>pub fn current_dir() -> Result<PathBuf, Error>pub fn current_exe() -> Result<PathBuf, Error>5. 程序退出
Section titled “5. 程序退出”std::env::exit()立即终止程序:
use std::env;
fn main() { println!("程序开始");
// 以错误码1退出 env::exit(1);
// 不会执行到这里 println!("程序结束");}方法签名:
pub fn exit(code: i32) -> !pub fn abort() -> !exit()- 正常退出,调用清理函数abort()- 立即终止,不调用清理函数
6. 设置环境变量
Section titled “6. 设置环境变量”use std::env;
fn main() { // 设置环境变量(只在当前进程有效) env::set_var("MY_APP_DEBUG", "true");
// 移除环境变量 env::remove_var("MY_APP_DEBUG");
// 临时修改Path(Unix风格) if let Some(mut path) = env::var_os("PATH") { path.push(":/custom/path"); env::set_var("PATH", &path); }}7. 跨平台考虑
Section titled “7. 跨平台考虑”use std::env;
fn main() { // Windows vs Unix 路径分隔符 #[cfg(windows)] let path_sep = ";"; #[cfg(not(windows))] let path_sep = ":";
println!("Path separator: {}", path_sep);
// 用户名 if let Ok(user) = env::var("USER") { println!("User: {}", user); } else if let Ok(user) = env::var("USERNAME") { println!("User: {}", user); }}8. 注意事项
Section titled “8. 注意事项”- 性能考虑:
args()和vars()在首次调用时捕获快照,后续迭代不再更新 - 错误处理:环境变量可能不存在,使用
Result或Option处理 - 安全性:避免在日志中打印敏感环境变量(如密码、密钥)
- 生命周期:设置的环境变量只在该进程及其子进程中有效
std::env模块是访问程序运行环境的窗口:
args()/args_os()- 命令行参数var()/vars()- 环境变量home_dir()/current_dir()- 目录操作exit()/abort()- 程序退出
这些API构成了Rust程序与操作系统交互的基础。