Rust:命令行参数与环境变量操作

Rust中,经常碰到命令行参数和环境变量操作。下面主要来了解一下。

一、命令行参数

Rust:命令行参数与环境变量操作_第1张图片
从上面可以看到,std::env实现了从cargo run 命令行中提取命令行参数 a b c进入程序。

二、读取环境变量

std::env::var函数,实现了操作系统中环境变量的功能。

env::var()-> std::env::Vars

Vars是什么,很复杂,他实现了Iterator.以下是标准库中源码:

#[stable(feature = "env", since = "1.0.0")]
pub struct Vars {
    inner: VarsOs,
}

/// An iterator over a snapshot of the environment variables of this process.
///
/// This structure is created by the [`std::env::vars_os`] function. See
/// its documentation for more.
///
/// [`std::env::vars_os`]: vars_os
#[stable(feature = "env", since = "1.0.0")]
pub struct VarsOs {
    inner: os_imp::Env,
}

Rust:命令行参数与环境变量操作_第2张图片需要说明的是,环境变量中,字符并不一定是Unicode标准的,这样就会报错。这时可以用:

env::vars_os 

再往下:读取特定环境变量操作

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    //println!("get command args :{:?} ", args);
    //println!("get env args : ");
    for (key, value) in env::vars() {
        //println!("  {}  =>  {}", key, value);
    }
    let key = "PATH";
    match env::var(key) {
        Ok(val) => {
          // val is String, splited by ";"
          println!("val =>{}",val);
        },
        Err(e) => println!("couldn't interpret {}: {}", key, e),
    }
}

三、设置环境变量
一般包括:查看所有环境变量、设置新的环境变量和修改老的环境变量。
1、在cmd下
Rust:命令行参数与环境变量操作_第3张图片
Rust:命令行参数与环境变量操作_第4张图片

上面分别做了设置,查看单独环境变量操作、修改操作。还是比较简单。

2、powshell

#查看所有环境变量 ls env:

#搜索环境变量 ls env:NODE*

#查看单个环境变量 $env:NODE_ENV

#添加/更新环境变量 $env:NODE_ENV=development

#删除环境变量 del evn:NODE_ENV

3、linux
(1) 修改bashrc

修改bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的
.bashrc文件就可以了。

vi ~/.bashrc

在下面添加:

Export PATH="$PATH:/NEW_PATH"
资料来源:
https://www.cnblogs.com/Joans/p/7760378.html

(2) export

export [-fnp][变量名称]=[变量设置值]

参数说明:

    -f  代表[变量名称]中为函数名称。
    -n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
    -p  列出所有的shell赋予程序的环境变量。

export MYENV=7 //定义环境变量并赋值

$ export PATH=$PATH:/home/to/operation_tools # 其中“:”表示增加,分隔号;windows下为“;”


如果写成下面的,麻烦就大了。

$ export PATH=/home/to/operation_tools

因为PATH原来是有一堆的路径,现在变成一个了,有一堆的系统估计找不到路径了。

你可能感兴趣的:(Rust)