diff --git a/corpus/expressions.txt b/corpus/expressions.txt index 1ed55e4..f4dcd46 100644 --- a/corpus/expressions.txt +++ b/corpus/expressions.txt @@ -66,6 +66,27 @@ echo ${abc: (command (command_name (word)) (expansion (variable_name))) (command (command_name (word)) (expansion (variable_name)))) +=================================== +Variable expansions with operators +=================================== + +A="${B[0]# }" +C="${D/#* -E /}" +F="${G%% *}" + +--- + +(program + (variable_assignment + (variable_name) + (string (expansion (subscript (variable_name) (word))))) + (variable_assignment + (variable_name) + (string (expansion (variable_name) (word) (word)))) + (variable_assignment + (variable_name) + (string (expansion (variable_name) (word) (word))))) + =================================== Variable expansions in strings =================================== diff --git a/grammar.js b/grammar.js index dea9244..22426d4 100644 --- a/grammar.js +++ b/grammar.js @@ -322,9 +322,7 @@ module.exports = grammar({ seq( $.variable_name, '=', - optional(seq( - $._expression - )) + optional($._expression) ), seq( choice( @@ -332,11 +330,9 @@ module.exports = grammar({ $._simple_variable_name, $._special_variable_name ), - optional(seq( - choice(':', ':?', '=', ':-', '%', '/', '-'), - optional(seq( - $._expression - )) + repeat(choice( + $._expression, + ':', ':?', '=', ':-', '%', '/', '-', '#' )) ), ),