summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/parse/test_ast.rs3
-rw-r--r--src/shell.pest8
2 files changed, 7 insertions, 4 deletions
diff --git a/src/parse/test_ast.rs b/src/parse/test_ast.rs
index 4ac75ec..fb3a4e3 100644
--- a/src/parse/test_ast.rs
+++ b/src/parse/test_ast.rs
@@ -233,6 +233,9 @@ fn test_basic() {
)
))
);
+
+ parse_eq!("foo ''", cs!(p!((0, 6), e!(w!("foo"), w!()))));
+ parse_eq!("foo \"\"", cs!(p!((0, 6), e!(w!("foo"), w!()))));
}
#[test]
diff --git a/src/shell.pest b/src/shell.pest
index 0c63802..92b173a 100644
--- a/src/shell.pest
+++ b/src/shell.pest
@@ -23,8 +23,8 @@ alternation_bareword = @{ alternation_bareword_char+ }
alternation_word_part = ${
var |
alternation_bareword |
- "'" ~ single_string ~ "'" |
- "\"" ~ (var | double_string)+ ~ "\""
+ "'" ~ single_string? ~ "'" |
+ "\"" ~ (var | double_string)* ~ "\""
}
alternation_word = ${ alternation_word_part* }
alternation = ${ "{" ~ alternation_word ~ ("," ~ alternation_word)* ~ "}" }
@@ -36,8 +36,8 @@ word_part = ${
substitution |
var |
bareword |
- "'" ~ single_string ~ "'" |
- "\"" ~ (substitution | var | double_string)+ ~ "\""
+ "'" ~ single_string? ~ "'" |
+ "\"" ~ (substitution | var | double_string)* ~ "\""
}
word = ${ word_part+ }