From 876721d83999d3682cd8f959768824beadfd1ad5 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Tue, 10 Mar 2026 10:21:40 +0100 Subject: escape parsing --- src/parse/mod.rs | 7 +++++++ src/parse/test.rs | 15 +++++++++++++++ 2 files changed, 22 insertions(+) (limited to 'src/parse') diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 4806421..4c19c96 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -470,6 +470,13 @@ impl Parse for ExpString { let x = b.peek(); if escaping { + let x = match x { + b'n' => b'\n', + b'r' => b'\r', + b't' => b'\t', + b'e' => 0x1b, // escape + _ => x, + }; add_char(p, x); escaping = false; b.adv(); diff --git a/src/parse/test.rs b/src/parse/test.rs index ca57e75..92124b0 100644 --- a/src/parse/test.rs +++ b/src/parse/test.rs @@ -94,3 +94,18 @@ fn variable_with_defaults() { pipes([cmd([str([var_default(b"x", estr(b"y"))])])]), ); } + +#[test] +fn escape_newline() { + parse_test(parse(b"\"\\n\""), pipes([cmd([estr(b"\n")])])); +} + +#[test] +fn escape_carriage_return() { + parse_test(parse(b"\"\\r\""), pipes([cmd([estr(b"\r")])])); +} + +#[test] +fn escape_tab() { + parse_test(parse(b"\"\\t\""), pipes([cmd([estr(b"\t")])])); +} -- cgit v1.2.3