Skip to content

Ch 25: std::env - 环境与环境变量

std::env模块提供了访问程序运行环境的接口,包括命令行参数、环境变量、当前目录等重要信息。

std::env::args()返回命令行参数的迭代器:

use std::env;
fn main() {
for (index, arg) in env::args().enumerate() {
println!("参数{}: {}", index, arg);
}
}

方法签名:

pub fn args() -> Args
pub fn args_os() -> ArgsOs
  • args() - 返回Unicode字符串迭代器
  • args_os() - 返回操作系统原始字符串(处理非UTF-8路径)

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() -> Vars
pub fn vars_os() -> VarsOs
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>

std::env::exit()立即终止程序:

use std::env;
fn main() {
println!("程序开始");
// 以错误码1退出
env::exit(1);
// 不会执行到这里
println!("程序结束");
}

方法签名:

pub fn exit(code: i32) -> !
pub fn abort() -> !
  • exit() - 正常退出,调用清理函数
  • abort() - 立即终止,不调用清理函数
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);
}
}
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);
}
}
  1. 性能考虑:args()和vars()在首次调用时捕获快照,后续迭代不再更新
  2. 错误处理:环境变量可能不存在,使用Result或Option处理
  3. 安全性:避免在日志中打印敏感环境变量(如密码、密钥)
  4. 生命周期:设置的环境变量只在该进程及其子进程中有效

std::env模块是访问程序运行环境的窗口:

  • args() / args_os() - 命令行参数
  • var() / vars() - 环境变量
  • home_dir() / current_dir() - 目录操作
  • exit() / abort() - 程序退出

这些API构成了Rust程序与操作系统交互的基础。