use crate::Path; use clap::{Arg, Command}; use std::env; pub const PATH: Path = Path::Bin; #[must_use] pub fn cli() -> Command { Command::new("echo") .about("Display a line of text") .long_about("Echo the STRING(s) to standard output") .version(env!("CARGO_PKG_VERSION")) .author("Nathan Fisher") .args([ Arg::new("inline") .short('n') .help("Do not output a trailing newline"), Arg::new("STRING").num_args(1..), ]) } pub fn run() { let args: Vec = env::args().collect(); let idx = match crate::progname() { Some(s) if s.as_str() == "echo" => 1, Some(_) => 2, None => unreachable!(), }; let len = args.len(); let n = len > idx && args[idx] == "-n"; let i = if n { idx + 1 } else { idx }; for (index, arg) in args.iter().enumerate().skip(i) { if index < len - 1 { print!("{arg} "); } else { print!("{arg}"); } } if !n { println!(); } }