diff --git a/crates/nu-cli/tests/commands/with_env.rs b/crates/nu-cli/tests/commands/with_env.rs index cbd12d0139..15b4f70d40 100644 --- a/crates/nu-cli/tests/commands/with_env.rs +++ b/crates/nu-cli/tests/commands/with_env.rs @@ -29,3 +29,38 @@ fn shorthand_doesnt_reorder_arguments() { assert_eq!(actual.out, "firstsecond"); } + +#[test] +fn with_env_shorthand_trims_quotes() { + let actual = nu!( + cwd: "tests/fixtures/formats", + "FOO='BARRRR' echo $nu.env | get FOO" + ); + + assert_eq!(actual.out, "BARRRR"); +} + +#[test] +fn with_env_and_shorthand_same_result() { + let actual_shorthand = nu!( + cwd: "tests/fixtures/formats", + "FOO='BARRRR' echo $nu.env | get FOO" + ); + + let actual_normal = nu!( + cwd: "tests/fixtures/formats", + "with-env [FOO BARRRR] {echo $nu.env} | get FOO" + ); + + assert_eq!(actual_shorthand.out, actual_normal.out); +} + +#[test] +fn with_env_shorthand_nested_quotes() { + let actual = nu!( + cwd: "tests/fixtures/formats", + "FOO='-arg \"hello world\"' echo $nu.env | get FOO" + ); + + assert_eq!(actual.out, "-arg \"hello world\""); +} diff --git a/crates/nu-parser/src/parse.rs b/crates/nu-parser/src/parse.rs index 919dcf58f7..3b3ddcd79f 100644 --- a/crates/nu-parser/src/parse.rs +++ b/crates/nu-parser/src/parse.rs @@ -1362,7 +1362,9 @@ fn expand_shorthand_forms( ) } else { let original_span = lite_pipeline.commands[0].name.span; - let (variable_name, value) = (assignment[0], assignment[1]); + let env_value = trim_quotes(assignment[1]); + + let (variable_name, value) = (assignment[0], env_value); let mut lite_pipeline = lite_pipeline.clone(); if !lite_pipeline.commands[0].args.is_empty() { @@ -1377,7 +1379,7 @@ fn expand_shorthand_forms( lite_pipeline, Some(( variable_name.to_string().spanned(original_span), - value.to_string().spanned(original_span), + value.spanned(original_span), )), None, )