mirror of
https://github.com/golang/go
synced 2024-11-17 22:05:02 -07:00
os: make ExpandEnv recognize '-' as a special shell parameter
'-' is one of shell special parameters. The existing implementation of isShellSpecialVar missed '-' from the list, causing "$-" and "${-}" expand differently. Fixes #16554 Change-Id: Iafc7984692cc83cff58f7c1e01267bf78b3a20a9 Reviewed-on: https://go-review.googlesource.com/25352 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
4338e5a891
commit
1756b66598
@ -37,7 +37,7 @@ func ExpandEnv(s string) string {
|
||||
// shell variable such as $*.
|
||||
func isShellSpecialVar(c uint8) bool {
|
||||
switch c {
|
||||
case '*', '#', '$', '@', '!', '?', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||
case '*', '#', '$', '@', '!', '?', '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -7,6 +7,7 @@
|
||||
package os_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
. "os"
|
||||
"testing"
|
||||
)
|
||||
@ -28,3 +29,28 @@ func TestSetenvUnixEinval(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var shellSpecialVarTests = []struct {
|
||||
k, v string
|
||||
}{
|
||||
{"*", "asterisk"},
|
||||
{"#", "pound"},
|
||||
{"$", "dollar"},
|
||||
{"@", "at"},
|
||||
{"!", "exclamation mark"},
|
||||
{"?", "question mark"},
|
||||
{"-", "dash"},
|
||||
}
|
||||
|
||||
func TestExpandEnvShellSpecialVar(t *testing.T) {
|
||||
for _, tt := range shellSpecialVarTests {
|
||||
Setenv(tt.k, tt.v)
|
||||
defer Unsetenv(tt.k)
|
||||
|
||||
argRaw := fmt.Sprintf("$%s", tt.k)
|
||||
argWithBrace := fmt.Sprintf("${%s}", tt.k)
|
||||
if gotRaw, gotBrace := ExpandEnv(argRaw), ExpandEnv(argWithBrace); gotRaw != gotBrace {
|
||||
t.Errorf("ExpandEnv(%q) = %q, ExpandEnv(%q) = %q; expect them to be equal", argRaw, gotRaw, argWithBrace, gotBrace)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user