官方参考: https://docs.rs/clap/4.5.1/clap/_derive/_tutorial/chapter_2
附加参数
- Postitionals, 位置参数
- Options, 选项参数
- Flags, 标志参数
- Subcommands, 子命令
- Defaults, 默认值
位置参数
你可以让用户按其在命令行上的位置指定值:
use clap::Parser;
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Cli {
name: Option<String>,
}
fn main() {
let cli = Cli::parse();
println!("name: {:?}", cli.name.as_deref());
}
$ 03_03_positional_derive --help
用法: 03_03_positional_derive[EXE] [名称]
参数:
[名称]
选项:
-h, --help 打印帮助信息
-V, --version 打印版本号
$ 03_03_positional_derive
name: None
$ 03_03_positional_derive bob
name: Some("bob")
需要注意默认的参数动作是设置(Set)。如果要接受多个值,则可以通过使用 Append 动作并通过 Vec 类型进行重写:
use clap::Parser;
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct Cli {
name: Vec<String>,
}
fn main() {
let cli = Cli::parse();
println!("name: {:?}", cli.name);
}
$ 03_03_positional_mult_derive --help
用法: 03_03_positional_mult_derive[EXE] [名称]...
参数:
[名称]...
选项:
-h, --help 打印帮助信息
-V, --version 打印版本号
$ 03_03_positional_mult_derive
name: []
$ 03_03_positional_mult_derive bob
name: ["bob"]
$ 03_03_positional_mult_derive bob john
name: ["bob", "john"]
选项参数
你可以使用标志为参数命名:
- 顺序不重要
- 可选的
- 意图清晰
要为参数指定标志,可以在字段上使用 #[arg(short = 'n')]
和(或) #[arg(long = "name")]
属性。当没有给出值时(例如 #[arg(short)]
),标志将从字段的名称推断。
use clap::Parser;