成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Rust中處理命令行參數和環境變量

開發 前端
在本章節中, 我們探討了Rust處理命令行參數的常見的兩種方式和處理環境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數的處理方式上, 與其它語言大同小異, 可能影響我們習慣的也就只剩下語法。

1.摘要

Rust的命令行和環境變量處理在標準庫中提供了一整套實現方法, 在本文中除了探索標準庫的使用方法之外, 也在不斷適應Rust獨有的語法特點。在本文中, 我們通過標準庫函數的返回值熟悉了迭代器的使用方法, 操作迭代器精確控制保存的內容, 包括字符串和鍵值對的使用方法。

2.讀取參數值

在Rust編程中要讀取命令行參數的值, 標準庫提供了一個函數: std::env::args, 該函數返回一個傳遞給命令行參數的迭代器, 迭代器中保存了所有參數內容, 調用者需要調用collect方法將其轉換成一個集合, 先看一段示例代碼:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    dbg!(args);
}

在上面的代碼中, 首先使用use語句將std::env模塊引入作用域以便使用它的args函數。然后調用其collect()方法, 該方法將接收命令行所有參數內容并保存到變量args中, 接著使用dbg!宏打印了args的內容。

現在將這段代碼編譯執行會發現沒有任何內容輸出, 這是因為執行運行沒有參數信息, 現在我們設計一個場景, 通過search參數來搜索一個文件, 完整命令如下:

cargo run -- search filename.txt

注意: 參數符號"--"與參數名之間有空格。

執行結果如下:

圖片圖片

從返回的結果來看, 集合中保存了三個參數, 實際上第一個參數是我們二進制文件名稱, 這跟C語言中的參數列表的行為很類似, 除了獲取到調用的程序名稱, 還包括所有以空格隔開的參數名稱。

3.將參數值保存到變量

在上面的例子中, 參數內容保存到了args變量中, 下面修改一下程序,代碼如下:

use std::env;

fn main() {
    let args: Vec<String> = env::args().collect();
    
    let param_name = &args[1];
    let file_name = &args[2];
    
    println!("第一個參數名:{}", param_name);
    println!("第二個參數名:{}", file_name);
}

在上面的代碼中, 我們根據數組索引來取變量名稱, 例如: args[0]對應是集合中的第一個元素, 也就是二進制程序名, 這個不是我們需要的, 如果要取參數search的內容, 使用args[1], 取文件名使用args[2], 以此類推。

執行結果如下:

圖片圖片

通過不同的變量分別接收不同的參數名, 在程序后面的邏輯中, 就可以使用這些保存獨立參數的變量名了。

4.處理環境變量

在std::env模塊中, 標準庫同樣提供了獲取環境變量的函數,為: env::vars(), 下面的代碼將把我這臺電腦的環境變量全部打印出來:

use std::env;

fn main() {
    for (key, value) in env::vars() {
        println!("{} => {}", key, value);
    }
}

同樣, env::vars()返回的也是一個迭代器, 不同的是, 數據結構是以key:value對的形式保存, 程序中分別將key和value進行打印:

圖片圖片

下面我們在程序中增加一項功能, 因為打印的參數實在太多, 我想把Path環境變量的內容打印出來該怎么做呢?,修改以下代碼:

use std::env;

fn main() {
    let search_key = "PATH";
    match env::var(search_key) {
        Ok(val) => {
            println!("PATH變量保存的內容為:{}", val);
        },
        Err(e) => println!("無法找到key:{}, 錯誤為:{}", search_key, e)
    }
}

在上面的代碼中, 我定義了一個需要搜索的Key名為"PATH", 并使用match正則直接在env::var()的返回迭代器中搜索Key名,這里env::var(param)為什么可以接收參數呢? 進入env.rs源碼可以看到以下代碼:

圖片圖片

env::var()接收需要搜索的Key,返回了一個Result<T, E>類型, 上面還給了一個使用的示例。

從env:var()函數內部,我們可以看到返回的是一個Result<String, VarError>類型,因此,如果獲取成功,在Ok()宏中可以設置參數接收結果,而使用Err()宏接收可能因失敗返回的錯誤, 先看下成功的情況, 打印PATH環境變量內容如下:

圖片圖片

現在再看一個搜索失敗的情況, 將要搜索的key的內容修改為: "SUNTIGER", 執行結果如下:

圖片圖片

此時將走另一個流程, 利用Err()宏打印錯誤信息。

除此之外, std::env包中還包含其他的一些方法, 例如:設置環境變量:set_var()、刪除當前運行進程的環境變量:remove_var()等,感興趣的可以查看Rust的官方文檔, 這里不再贅述。

5.總結

在本章節中, 我們探討了Rust處理命令行參數的常見的兩種方式和處理環境變量的兩種常見方式, 拋開Rust的語法, 實際上在命令行參數的處理方式上, 與其它語言大同小異, 可能影響我們習慣的也就只剩下語法。Rust在某些機制實現上跟Go語言比起來可能略顯繁瑣, 但我們在學習任何語言的時候首先要想到每種編程語言的主要特點, 例如: Go語言主打一個語法簡潔和高并發, 因此學習Go語言上手感覺特別快, 而且在處理高并發過程中, Go語言的協程和通道使用起來特別容易,性能也非常不錯。而Rust的主打特點是內存安全, 要將這種安全思想貫穿全局, Rust會強行轉換使用它的每個人的編程思想, 而Rust編譯器就像映射的鏡子, 任何不好的編程習慣和疏忽換來的都是紅色的錯誤提示。

責任編輯:武曉燕 來源: 二進制空間安全
相關推薦

2017-03-08 11:10:39

LinuxShell命令

2023-12-12 13:22:00

LinuxDocker容器

2009-07-15 17:10:26

Jython解析命令行

2021-11-18 15:54:17

FreeDOSLinux

2010-11-24 15:33:59

mysql命令行參數

2010-03-10 17:23:37

Python 命令行參

2011-06-14 09:21:55

Linux Qt 環境變量

2024-01-29 00:21:14

環境變量數據

2021-07-12 14:53:27

LinuxGmail電子郵件

2010-03-24 14:08:10

CentOS命令行

2018-04-23 08:45:05

Linux命令行

2018-07-10 14:29:05

Linux命令行

2010-07-20 14:02:38

Perl命令行參數

2010-07-26 09:32:41

Perl命令行

2011-08-22 11:51:13

Linuxconfigure

2023-03-28 08:40:22

命令行JSON用法

2023-03-01 11:35:45

2010-05-27 17:17:29

Linux查看環境變量

2022-10-25 13:01:36

Linux命令行空目錄

2010-07-15 09:27:25

Perl命令行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频国产精品 | 久久久久久看片 | 在线播放国产一区二区三区 | 久久999| 国产福利视频导航 | 欧美日韩在线视频一区 | 国产精品免费在线 | 亚洲视频 欧美视频 | 亚洲一区二区三区免费在线观看 | 精品免费看 | 黄视频欧美 | 国产欧美一区二区三区在线看 | 日韩欧美亚洲 | 成人午夜视频在线观看 | 精品视频亚洲 | 九九精品网 | 国产精品一区在线观看 | 成年人黄色免费视频 | 成人精品一区二区三区中文字幕 | 一区二区日韩 | 国产电影一区二区在线观看 | 337p日本欧洲亚洲大胆鲁鲁 | 久草免费在线视频 | 日韩三级免费网站 | 成人国产精品久久 | 国产在线网站 | 毛片网站在线观看视频 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 欧美成人免费在线视频 | 国产精品九九九 | 日韩成年人视频在线 | 久久国产高清 | 91视频播放 | 欧美成人精品在线观看 | 欧美乱码精品一区二区三区 | 午夜影院在线观看 | 美女在线国产 | 亚洲乱码国产乱码精品精98午夜 | 国产ts人妖另类 | 欧美日韩不卡合集视频 | 国产精品国产馆在线真实露脸 |