如何接受文字“ *”作为命令行参数?

时间:2019-05-27 03:28:43

标签: shell rust

我正在用rust写一个非常简单的命令行计算器,先得到一个数字,一个运算符,然后是另一个数字,然后进行计算并打印结果。为了显示我从命令args得到的内容,我将它们打印在主代码之前的循环中。对于加号,减号和除法,我可以正常工作,但是对于乘法,在打印时会得到意外的结果,而不是星号(*)用于乘法,但是会在当前目录中得到文件列表。 这是我的rust代码,如果有任何解决方法,我将感谢您的解释。

use std::env;

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

    for arg in args.iter(){
        println!("{}", arg);
    }

    let mut result = 0;
    let opt = args[2].to_string();
    let oper1 = args[1].parse::<i32>().unwrap();
    let oper2 = args[3].parse::<i32>().unwrap();
    match opt.as_ref(){
        "+" => result = oper1 + oper2,
        "-" => result = oper1 - oper2,
        "*" => result = oper1 * oper2,
        "/" => result = oper1 / oper2,
        _ => println!("Error")
    }

    println!("{} {} {} = {}", oper1, opt, oper2, result);

}

1 个答案:

答案 0 :(得分:6)

通配符(*)正在扩展。 Shell甚至会在看到您实际键入

之前将其发送给程序

You can read more about here.

为避免这种情况,您可以将其用引号引起来,如下所示:

./program 1 "*" 1