commit bash-20160520 snapshot

This commit is contained in:
Chet Ramey
2016-05-23 09:57:30 -04:00
parent 0fcb334438
commit bddda3d2e1
32 changed files with 625 additions and 113 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
BUILD_DIR=/usr/local/build/chet/bash/bash-current
BUILD_DIR=/usr/local/build/bash/bash-current
THIS_SH=$BUILD_DIR/bash
PATH=$PATH:$BUILD_DIR
+5
View File
@@ -61,3 +61,8 @@ opt: b
opt: c
opt: z
$1 = a
./getopts10.sub: line 3: OPTARG: readonly variable
OPTARG = x = ?
unset x = ?
declare -r RO="foo"
declare -r RO="foo"
+2
View File
@@ -39,3 +39,5 @@ ${THIS_SH} ./getopts7.sub -a
${THIS_SH} ./getopts8.sub
${THIS_SH} ./getopts9.sub
${THIS_SH} ./getopts10.sub
+17
View File
@@ -0,0 +1,17 @@
set -- -a bb
readonly OPTARG
getopts :x x
echo OPTARG = $OPTARG x = $x
getopts x x
echo ${OPTARG-unset} x = $x
typeset -r RO=foo
typeset -n OPTARG=RO
getopts :x x
typeset -p RO
getopts x x
typeset -p RO
+69 -20
View File
@@ -166,8 +166,8 @@ declare -i bar="8"
8
declare -n foo="bar"
./nameref10.sub: line 64: typeset: bar: not found
./nameref11.sub: line 1: declare: /: invalid variable name for name reference
./nameref11.sub: line 2: declare: /: invalid variable name for name reference
./nameref11.sub: line 1: declare: `/': invalid variable name for name reference
./nameref11.sub: line 2: declare: `/': invalid variable name for name reference
./nameref11.sub: line 3: `/': not a valid identifier
./nameref11.sub: line 4: declare: `/': not a valid identifier
./nameref11.sub: line 5: `/': not a valid identifier
@@ -176,29 +176,48 @@ declare -n foo="bar"
x
./nameref11.sub: line 7: ((: `0': not a valid identifier
./nameref11.sub: line 8: declare: 0: invalid variable name for name reference
./nameref11.sub: line 9: declare: /: invalid variable name for name reference
./nameref11.sub: line 10: declare: /: invalid variable name for name reference
./nameref11.sub: line 11: `/': not a valid identifier
./nameref11.sub: line 8: declare: `0': invalid variable name for name reference
./nameref11.sub: line 9: declare: `/': invalid variable name for name reference
./nameref11.sub: line 10: declare: `/': invalid variable name for name reference
/
./nameref11.sub: line 12: `/': not a valid identifier
./nameref11.sub: line 13: exec: `10': not a valid identifier
./nameref11.sub: line 13: r: cannot assign fd to variable
./nameref11.sub: line 14: warning: coproc: r: removing nameref attribute
./nameref11.sub: line 14: warning: r: removing nameref attribute
63
./nameref11.sub: line 15: declare: RO: readonly variable
./nameref11.sub: line 15: RO: readonly variable
./nameref11.sub: line 16: declare: /: invalid variable name for name reference
./nameref11.sub: line 16: declare: `/': invalid variable name for name reference
/
./nameref11.sub: line 17: declare: /: invalid variable name for name reference
./nameref11.sub: line 17: declare: `/': invalid variable name for name reference
./nameref11.sub: illegal option -- h
./nameref11.sub: line 18: getopts: `?': not a valid identifier
./nameref11.sub: line 19: warning: r: removing nameref attribute
declare -a r=()
./nameref11.sub: line 20: declare: r: reference variable cannot be an array
./nameref11.sub: line 21: printf: `/': not a valid identifier
./nameref12.sub: line 6: declare: /: invalid variable name for name reference
./nameref12.sub: line 9: declare: %: invalid variable name for name reference
./nameref11.sub: line 23: `': not a valid identifier
./nameref11.sub: line 24: declare: `': not a valid identifier
./nameref11.sub: line 25: `': not a valid identifier
./nameref11.sub: line 26: printf: `': not a valid identifier
./nameref11.sub: line 27: declare: `': invalid variable name for name reference
declare -r ROVAR="42"
./nameref11.sub: line 32: ROVAR: readonly variable
./nameref11.sub: line 32: ROVAR: cannot unset: readonly variable
declare -r ROVAR="42"
./nameref11.sub
./nameref11.sub: line 34: `@': not a valid identifier
./nameref11.sub
declare -n ref="x"
./nameref11.sub: line 39: RO: readonly variable
declare -r RO_PID
./nameref11.sub: line 39: RO: cannot unset: readonly variable
declare -r RO="x"
./nameref11.sub: line 39: declare: RO_PID: not found
./nameref11.sub: line 41: ref_PID: readonly variable
declare -r RO2="a"
./nameref12.sub: line 6: declare: `/': invalid variable name for name reference
./nameref12.sub: line 9: declare: `%': invalid variable name for name reference
./nameref12.sub: line 13: `^': not a valid identifier
declare -n r
declare -a foo
@@ -206,15 +225,23 @@ declare -a foo=([0]="7")
./nameref12.sub: line 26: declare: `42': not a valid identifier
./nameref12.sub: line 27: declare: x: not found
declare -nr RO="foo"
./nameref12.sub: line 37: `/': not a valid identifier
0 0
./nameref12.sub: line 38: `/': not a valid identifier
./nameref12.sub: line 43: declare: `7*6': not a valid identifier
./nameref12.sub: line 43: declare: foo: not found
./nameref12.sub: line 45: `7*6': not a valid identifier
/
./nameref12.sub: line 45: declare: `7*6': not a valid identifier
./nameref12.sub: line 45: declare: foo: not found
./nameref12.sub: line 47: `7*6': not a valid identifier
declare -n ref="var"
declare -n ref="var"
./nameref12.sub: line 74: readonly: `var[0]': not a valid identifier
declare -- var="foo"
declare -r var2="foo"
declare -n ref="var"
declare -a var=([0]="foo")
./nameref12.sub: line 91: `': not a valid identifier
declare -n ref
declare -- ref="global"
declare -a var=([0]="foo2")
./nameref12.sub: line 100: declare: global: not found
declare -- a
declare -n r="a"
declare -- a
@@ -227,7 +254,29 @@ declare -n r="a"
0
declare -n r
declare -n r
./nameref13.sub: line 88: typeset: 12345: invalid variable name for name reference
./nameref13.sub: line 88: typeset: `12345': invalid variable name for name reference
declare -n foo
./nameref13.sub: line 97: typeset: 12345: invalid variable name for name reference
./nameref13.sub: line 97: typeset: `12345': invalid variable name for name reference
declare -n foo
declare -nx ref="var"
var
var
var
var
foo
foo
foo
foo
before
declare -n ref="var"
./nameref14.sub: line 23: typeset: var: not found
first
declare -n ref="var"
declare -x var="xxx"
invalid
declare -n ref="var"
declare -x var="5"
after
declare -n ref="var"
./nameref14.sub: line 32: typeset: var: not found
declare -n ref="var"
+1
View File
@@ -128,3 +128,4 @@ ${THIS_SH} ./nameref10.sub
${THIS_SH} ./nameref11.sub
${THIS_SH} ./nameref12.sub
${THIS_SH} ./nameref13.sub
${THIS_SH} ./nameref14.sub
+21 -1
View File
@@ -18,4 +18,24 @@ declare -n r=s; declare -n s; s=/ ; unset -n r; unset -n s
declare -n r; getopts x r -h ; unset r; unset -n r
declare -n r; mapfile r < /dev/null ; declare -p r; unset r ; unset -n r
mapfile r < /dev/null; declare -n r ; unset r ; unset -n r
declare -n r; printf -v r /
declare -n r; printf -v r / ; unset -n r
declare -n r; r="" ; unset -n r
declare -n r="" ; unset -n r
declare -n r; : ${r=} ; unset -n r
declare -n r; printf -v r '' ; unset -n r
r=""; declare -n r ; unset -n r
export r
# coproc tests, since coproc sets and unsets variables
declare -r ROVAR=42
declare -p ROVAR; coproc ROVAR { :; }; wait; declare -p ROVAR
echo ${@:0}; coproc @ { :; }; wait ; echo ${@:0}
declare -n ref=x; coproc ref { :; }; wait ; declare -p ref
unset -n ref ; unset ref
declare -r RO RO_PID; coproc RO { :; }; declare -p RO_PID; wait; declare -p RO RO_PID
declare -r RO2=a; declare -n ref_PID=RO2; coproc ref { :; }; wait; declare -p RO2
+35
View File
@@ -31,6 +31,8 @@ declare -p RO
unset -n r; unset r
# the details of this may change; currently we put namerefs and values into
# the tempenv if the nameref value is an invalid variable name
f() { echo $r; }
declare -n r
@@ -63,3 +65,36 @@ f()
declare -p ref
}
f
unset ref; unset -n ref
unset var
var=foo
typeset -n ref=var[0]
readonly ref
typeset -p var
var2=foo
typeset -n ref2=var2
readonly ref2
typeset -p var2
unset var
unset -n ref ref2
unset var; typeset -n ref=var
ref[0]=foo
typeset -p ref var
unset -n ref
unset var; typeset -n ref
ref[0]=foo
typeset -p ref
unset -n ref
ref=global
f() { declare -n ref=var; ref[0]=foo1; }; f
f() { declare -n ref=var; ref[0]=foo2; }; f
declare -p ref var
declare -p global
+43
View File
@@ -0,0 +1,43 @@
# exporting namerefs and putting namerefs in temp env post bash-4.3
typeset -nx ref=var;
typeset -p ref
var=foo; str=''
printenv ref # var
ref+=$str printenv ref # var
ref+="$str" printenv ref # var
ref=$ref$str printenv ref # var
export ref # follows nameref and exports var
printenv var # foo
ref+=$str printenv var # foo
ref+="$str" printenv var # foo
ref=$ref$str printenv var # foo
# none of these should change ref; should follow the nameref and export var
unset var; unset -n ref; typeset -n ref=var
echo before
typeset -p ref var
echo first
ref=xxx typeset -p ref var
echo invalid
var= ref=5 typeset -p ref var
echo after
typeset -p ref var
# ref isn't exported, so none of the printenvs should print anything
unset var ; unset -n ref
typeset -n ref=var;
typeset -p ref
var=foo; str=''
printenv ref
ref+=$str printenv ref
ref+="$str" printenv ref
ref=$ref$str printenv ref