Commit 9f19392f authored by Robert Griesemer's avatar Robert Griesemer

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

R=r
CC=golang-dev
https://golang.org/cl/2993041
parent 02469b82
...@@ -11,17 +11,17 @@ package os ...@@ -11,17 +11,17 @@ package os
func Expand(s string, mapping func(string) string) string { func Expand(s string, mapping func(string) string) string {
buf := make([]byte, 0, 2*len(s)) buf := make([]byte, 0, 2*len(s))
// ${} is all ASCII, so bytes are fine for this operation. // ${} is all ASCII, so bytes are fine for this operation.
for i := 0; i < len(s); { i := 0
if s[i] != '$' || i == len(s)-1 { for j := 0; j < len(s); j++ {
buf = append(buf, s[i]) if s[j] == '$' && j+1 < len(s) {
i++ buf = append(buf, []byte(s[i:j])...)
continue name, w := getShellName(s[j+1:])
buf = append(buf, []byte(mapping(name))...)
j += w
i = j + 1
} }
name, w := getShellName(s[i+1:])
buf = append(buf, []byte(mapping(name))...)
i += 1 + w
} }
return string(buf) return string(buf) + s[i:]
} }
// ShellExpand replaces ${var} or $var in the string according to the values // ShellExpand replaces ${var} or $var in the string according to the values
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment