1
0
mirror of https://github.com/golang/go synced 2024-11-24 22:00:09 -07:00

os.Expand: don't call append for each non-variable char

R=r
CC=golang-dev
https://golang.org/cl/2993041
This commit is contained in:
Robert Griesemer 2010-11-08 15:13:35 -08:00
parent 02469b8200
commit 9f19392f1a

View File

@ -11,17 +11,17 @@ package os
func Expand(s string, mapping func(string) string) string {
buf := make([]byte, 0, 2*len(s))
// ${} is all ASCII, so bytes are fine for this operation.
for i := 0; i < len(s); {
if s[i] != '$' || i == len(s)-1 {
buf = append(buf, s[i])
i++
continue
}
name, w := getShellName(s[i+1:])
i := 0
for j := 0; j < len(s); j++ {
if s[j] == '$' && j+1 < len(s) {
buf = append(buf, []byte(s[i:j])...)
name, w := getShellName(s[j+1:])
buf = append(buf, []byte(mapping(name))...)
i += 1 + w
j += w
i = j + 1
}
return string(buf)
}
return string(buf) + s[i:]
}
// ShellExpand replaces ${var} or $var in the string according to the values