diff --git a/crates/nu-command/src/filters/select.rs b/crates/nu-command/src/filters/select.rs index dc9da1054c..916a4e8e5e 100644 --- a/crates/nu-command/src/filters/select.rs +++ b/crates/nu-command/src/filters/select.rs @@ -71,7 +71,15 @@ produce a table, a list will produce a list, and a record will produce a record. }; new_columns.push(cv.clone()); } - Value::Int { val, .. } => { + Value::Int { val, internal_span } => { + if val < 0 { + return Err(ShellError::CantConvert { + to_type: "cell path".into(), + from_type: "negative number".into(), + span: internal_span, + help: None, + }); + } let cv = CellPath { members: vec![PathMember::Int { val: val as usize, diff --git a/crates/nu-command/tests/commands/select.rs b/crates/nu-command/tests/commands/select.rs index 7f2e9b8b57..028ecc3db7 100644 --- a/crates/nu-command/tests/commands/select.rs +++ b/crates/nu-command/tests/commands/select.rs @@ -275,3 +275,9 @@ fn select_single_row_with_variable() { assert_eq!(actual.out, "[[a]; [3]]".to_string()); assert!(actual.err.is_empty()); } + +#[test] +fn select_with_negative_number_errors_out() { + let actual = nu!("[1 2 3] | select (-2)"); + assert!(actual.err.contains("negative number")); +}