env::vars în Rust

Iterator peste toate variabilele de mediu ale procesului, ca perechi (nume, valoare).

Sintaxă
pub fn vars() -> Vars   // Iterator<Item = (String, String)>

Ce face env::vars

env::vars() dă toate variabilele de mediu ca perechi (String, String). Ordinea nu este garantată. Dacă vreo variabilă are nume sau valoare care nu sunt UTF-8 valide, iteratorul intră în panică; varianta sigură este env::vars_os().

Se folosește de obicei pentru a găsi toate variabilele cu un anumit prefix (de exemplu APP_), pentru diagnostic sau pentru a le transmite mai departe unui proces copil.

Ce returnează

Un iterator Vars peste perechi (String, String).

Exemple

Exemplul 1: Variabilele cu un anumit prefix

Setăm trei variabile la pornire (operație unsafe din ediția 2024), apoi le căutăm după prefix. BTreeMap le ține sortate.

use std::collections::BTreeMap;
use std::env;

fn main() {
    // SIGURANȚĂ: încă nu există alte fire.
    unsafe {
        env::set_var("DEXBLOG_LIMBA", "ro");
        env::set_var("DEXBLOG_TEMA", "intunecata");
        env::set_var("DEXBLOG_ORAS", "Cluj");
    }

    let setari: BTreeMap<String, String> = env::vars()
        .filter_map(|(k, v)| k.strip_prefix("DEXBLOG_").map(|s| (s.to_lowercase(), v)))
        .collect();
    for (k, v) in &setari {
        println!("{k} = {v}");
    }
}

Rezultat

limba = ro
oras = Cluj
tema = intunecata

Exemplul 2: Câte variabile are procesul

Numărul și valorile depind de calculator și de felul în care este pornit programul.

use std::env;

fn main() {
    let mut nume: Vec<String> = env::vars().map(|(k, _)| k).collect();
    nume.sort();
    println!("variabile de mediu: {}", nume.len());
    println!("primele 3 (sortate): {:?}", &nume[..3]);
}

Rezultat (depinde de calculator)

variabile de mediu: 42
primele 3 (sortate): ["CARGO", "CARGO_HOME", "CARGO_MANIFEST_DIR"]

Greșeli frecvente

  • Afișezi toate variabilele în jurnale: pot conține parole și chei (AWS_SECRET_ACCESS_KEY, DATABASE_URL).
  • Te bazezi pe ordinea din vars(): sortează dacă ai nevoie de ordine stabilă.

Comenzi înrudite

  • env::var: Citește valoarea unei variabile de mediu (HOME, PATH, setări proprii); dă Err dacă nu există.
  • Command: Pornește alt program (proces copil): new() alege programul, arg() și args() adaugă argumente.
  • env::args: Argumentele din linia de comandă cu care a fost pornit programul; primul este numele programului.