diff --git a/crates/nu-cli/src/commands/str_/substring.rs b/crates/nu-cli/src/commands/str_/substring.rs index cbfa4a4b36..dea5e13e03 100644 --- a/crates/nu-cli/src/commands/str_/substring.rs +++ b/crates/nu-cli/src/commands/str_/substring.rs @@ -159,12 +159,14 @@ fn action(input: &Value, options: &Substring, tag: impl Into) -> Result Ok(UntaggedValue::string( + Ordering::Less => Ok(UntaggedValue::string(if end == isize::max_value() { + s.chars().skip(start as usize).collect::() + } else { s.chars() .skip(start as usize) .take((end - start) as usize) - .collect::(), - ) + .collect::() + }) .into_value(tag)), } } else { @@ -330,6 +332,9 @@ mod tests { expectation("and", (0, -3)), expectation("andr", (0, -2)), expectation("andre", (0, -1)), + // str substring [ -4 , _ ] + // str substring -4 , + expectation("dres", (-4, isize::max_value())), expectation("", (0, -110)), expectation("", (6, 0)), expectation("", (6, -1)),