diff --git a/frontend/lexer_def.py b/frontend/lexer_def.py index 058e6f2357..daaa5f8f33 100644 --- a/frontend/lexer_def.py +++ b/frontend/lexer_def.py @@ -434,6 +434,8 @@ def IsKeyword(name): LEXER_DEF[lex_mode_e.VSub_ArgDQ] = \ _DQ_BACKSLASH + _VS_ARG_COMMON + _LEFT_SUBS + _VARS + [ + C(r'\}', Id.Lit_EscapedChar), # For "${var-\}}" + R(r'[^$`/}"\0\\#%]+', Id.Lit_Chars), # matches a line at most # Weird wart: even in double quoted state, double quotes are allowed diff --git a/spec/var-sub-quote.test.sh b/spec/var-sub-quote.test.sh index 4523683084..539f9e27e4 100644 --- a/spec/var-sub-quote.test.sh +++ b/spec/var-sub-quote.test.sh @@ -261,3 +261,30 @@ echo "${unset:-'a'}" a 'a' ## END + + +#### Right Brace as argument (similar to #702) + +echo "${var-}}" +echo "${var-\}}" +echo "${var-'}'}" +echo "${var-"}"}" +## STDOUT: +} +} +''} +} +## END +## BUG bash STDOUT: +} +} +'}' +} +## END +## BUG yash STDOUT: +} +} +} +} +## END +