diff options
Diffstat (limited to 'src/parse')
| -rw-r--r-- | src/parse/mod.rs | 8 | ||||
| -rw-r--r-- | src/parse/test.rs | 8 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs index 8fa2e23..9cd894e 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -528,7 +528,13 @@ impl Parse for ExpString { continue; } - add_char(p, x); + if delim == b' ' && x == b'~' { + p.push(StringPart::Var(VarName { + name: b"HOME".to_vec(), + })); + } else { + add_char(p, x); + } if delim == b' ' { already_parsed = true; diff --git a/src/parse/test.rs b/src/parse/test.rs index 6f49ed4..9e2d7a8 100644 --- a/src/parse/test.rs +++ b/src/parse/test.rs @@ -70,3 +70,11 @@ fn unclosed_single_quote() { fn unclosed_double_quote() { assert!(do_parse(b"x\"").is_err()) } + +#[test] +fn tilde() { + parse_test( + parse(b"echo ~"), + pipes([cmd([estr(b"echo"), str([var(b"HOME")])])]), + ); +} |
