aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/parse/mod.rs8
-rw-r--r--src/parse/test.rs8
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")])])]),
+ );
+}