diff --git a/expand.go b/expand.go index 4bb0684..ae653f0 100644 --- a/expand.go +++ b/expand.go @@ -85,9 +85,6 @@ func expandDoubleQuoted(input string, vars map[string][]string, expandBackticks break } - _, w := utf8.DecodeRuneInString(input[j:]) - j += w - c, w := utf8.DecodeRuneInString(input[j:]) j += w diff --git a/rules.go b/rules.go index 2e49973..3627599 100644 --- a/rules.go +++ b/rules.go @@ -189,10 +189,24 @@ func (rs *ruleSet) executeAssignment(ts []token) *assignmentError { ts[0]} } + // interpret tokens in assignment context + input := make([]string, 0) + for i := 1; i < len(ts); i++ { + if ts[i].typ != tokenWord || (i > 1 && ts[i-1].typ != tokenWord) { + if len(input) == 0 { + input = append(input, ts[i].val) + } else { + input[len(input)-1] += ts[i].val + } + } else { + input = append(input, ts[i].val) + } + } + // expanded variables vals := make([]string, 0) - for i := 1; i < len(ts); i++ { - vals = append(vals, expand(ts[i].val, rs.vars, true)...) + for i := 0; i < len(input); i++ { + vals = append(vals, expand(input[i], rs.vars, true)...) } rs.vars[assignee] = vals