Fix a bugs in assignment parsing.

This commit is contained in:
Daniel Jones 2013-04-28 13:25:13 -07:00
parent b7df226f0d
commit bd5c30c30a
2 changed files with 16 additions and 5 deletions

View file

@ -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

View file

@ -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