diff --git a/src/parse_util.rs b/src/parse_util.rs index e37acceb6..bfc20929f 100644 --- a/src/parse_util.rs +++ b/src/parse_util.rs @@ -220,6 +220,10 @@ fn parse_util_locate_cmdsub( let mut last_dollar = None; let mut paran_begin = None; let mut paran_end = None; + enum Quote { + Real(char), + VirtualDouble, + } fn process_opening_quote( input: &[char], inout_is_quoted: &mut Option<&mut bool>, @@ -227,8 +231,12 @@ fn process_opening_quote( quoted_cmdsubs: &mut Vec, pos: usize, last_dollar: &mut Option, - quote: char, + quote: Quote, ) -> Option { + let quote = match quote { + Quote::Real(q) => q, + Quote::VirtualDouble => '"', + }; let q_end = quote_end(input.into(), pos, quote)?; // Found a valid closing quote. if input[q_end] == '$' { @@ -258,7 +266,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - '"', + Quote::VirtualDouble, ) .unwrap_or(input.len()); } @@ -274,7 +282,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - c, + Quote::Real(c), ) { Some(q_end) => pos = q_end, None => break, @@ -320,7 +328,7 @@ fn process_opening_quote( &mut quoted_cmdsubs, pos, &mut last_dollar, - '"', + Quote::VirtualDouble, ) { Some(q_end) => pos = q_end, None => break,