commit bash-20180309 snapshot

This commit is contained in:
Chet Ramey
2018-03-12 08:10:29 -04:00
parent 2e66dc02d6
commit bf5b8103d4
22 changed files with 350 additions and 17 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
+44
View File
@@ -577,3 +577,47 @@ jkl
abc
def ghi
jkl
1. indexed:
reference:
./array25.sub: line 10: ${a[ ]}: bad substitution
./array25.sub: line 11: ' ': syntax error: operand expected (error token is "' '")
./array25.sub: line 12: ${a[ ]}: bad substitution
4. 0
5. 0
6. 0
assignment:
1.declare -a a=([0]="10" [1]="1")
2.declare -a a=([0]="11" [1]="1")
3.declare -a a=([0]="12" [1]="1")
4.declare -a a=([0]="13" [1]="1")
arithmetic:
1.declare -a a=([0]="0" [1]="1")
2.declare -a a=([0]="0" [1]="1")
3.declare -a a=([0]="0" [1]="1")
4.declare -a a=([0]="0" [1]="1")
5.declare -a a=([0]="0" [1]="1")
6.declare -a a=([0]="11" [1]="1")
7.declare -a a=([0]="0" [1]="1")
8.declare -a a=([0]="13" [1]="1")
2. associative:
reference:
./array25.sub: line 47: ${a[ ]}: bad substitution
2.
./array25.sub: line 49: ${a[ ]}: bad substitution
4.
5.
6.
assignment:
1.declare -A a=([" "]="10" [0]="0" [1]="1" )
2.declare -A a=([" "]="11" [0]="0" [1]="1" )
3.declare -A a=([" "]="12" [0]="0" [1]="1" )
4.declare -A a=([" "]="13" [0]="0" [1]="1" )
arithmetic:
1.declare -A a=([" "]="13" [0]="0" [1]="1" )
2.declare -A a=([" "]="13" [0]="0" [1]="1" )
3.declare -A a=([" "]="13" [0]="0" [1]="1" )
4.declare -A a=([" "]="13" [0]="0" [1]="1" )
5.declare -A a=([" "]="13" [0]="0" [1]="1" )
6.declare -A a=([" "]="13" [0]="0" [1]="1" ["\" \""]="11" )
7.declare -A a=([" "]="13" [0]="0" [1]="1" ["\" \""]="11" )
8.declare -A a=([" "]="13" [0]="0" [1]="1" ["\" \""]="13" )
+1
View File
@@ -400,3 +400,4 @@ ${THIS_SH} ./array21.sub
${THIS_SH} ./array22.sub
${THIS_SH} ./array23.sub
${THIS_SH} ./array24.sub
${THIS_SH} ./array25.sub
+70
View File
@@ -0,0 +1,70 @@
# tests with blank subscripts, indexed and associative
echo 1. indexed:
a[0]=0 a[1]=1
v=" "
echo reference:
echo 1. ${a[ ]}
echo 2. ${a[' ']}
echo 3. "${a[ ]}"
echo 4. ${a[$v]}
echo 5. ${a["$v"]}
echo 6. "${a[$v]}"
echo assignment:
echo -n 1. ; a[ ]=10 ; typeset -p a ; a[0]=0
echo -n 2. ; a[" "]=11 ; typeset -p a ; a[0]=0
echo -n 3. ; a[$v]=12 ; typeset -p a ; a[0]=0
echo -n 4. ; a["$v"]=13 ; typeset -p a ; a[0]=0
echo arithmetic:
echo -n 1. ; (( a[ ]=10 )); typeset -p a ; a[0]=0
echo -n 2. ; (( a[" "]=11 )); typeset -p a ; a[0]=0
echo -n 3. ; (( a[$v]=12 )); typeset -p a ; a[0]=0
echo -n 4. ; (( a["$v"]=13 )); typeset -p a ; a[0]=0
echo -n 5. ; let "a[ ]=10" ; typeset -p a ; a[0]=0
echo -n 6. ; let "a[\" \"]=11" ; typeset -p a ; a[0]=0
echo -n 7. ; let "a[$v]=12" ; typeset -p a ; a[0]=0
echo -n 8. ; let "a[\"$v\"]=13" ; typeset -p a ; a[0]=0
unset -v a v
echo 2. associative:
shopt -s assoc_expand_once
typeset -A a
a[0]=0 a[1]=1
v=" "
echo reference:
echo 1. ${a[ ]}
echo 2. ${a[' ']}
echo 3. "${a[ ]}"
echo 4. ${a[$v]}
echo 5. ${a["$v"]}
echo 6. "${a[$v]}"
echo assignment:
echo -n 1. ; a[ ]=10 ; typeset -p a ; a[0]=0
echo -n 2. ; a[" "]=11 ; typeset -p a ; a[0]=0
echo -n 3. ; a[$v]=12 ; typeset -p a ; a[0]=0
echo -n 4. ; a["$v"]=13 ; typeset -p a ; a[0]=0
echo arithmetic:
echo -n 1. ; (( a[ ]=10 )); typeset -p a ; a[0]=0
echo -n 2. ; (( a[" "]=11 )); typeset -p a ; a[0]=0
echo -n 3. ; (( a[$v]=12 )); typeset -p a ; a[0]=0
echo -n 4. ; (( a["$v"]=13 )); typeset -p a ; a[0]=0
echo -n 5. ; let "a[ ]=10" ; typeset -p a ; a[0]=0
echo -n 6. ; let "a[\" \"]=11" ; typeset -p a ; a[0]=0
echo -n 7. ; let "a[$v]=12" ; typeset -p a ; a[0]=0
echo -n 8. ; let "a[\"$v\"]=13" ; typeset -p a ; a[0]=0
+16 -4
View File
@@ -127,10 +127,22 @@ after 2: 1
after 3: 1
array after 1: 1
array after 2: 1
./errors6.sub: line 18: ${-3}: bad substitution
./errors6.sub: line 19: -3: invalid variable name
./errors6.sub: uvar: parameter not set
./errors6.sub: uvar: parameter null or not set
./errors6.sub: uvar: parameter null or not set
./errors6.sub: line 25: ${-3:-${-3}}: bad substitution
./errors6.sub: line 26: ${-3}: bad substitution
./errors6.sub: line 27: -3: invalid variable name
after indir: 1
./errors6.sub: line 18: ${-3}: bad substitution
./errors6.sub: line 19: -3: invalid variable name
./errors6.sub: line 30: -3: invalid variable name
./errors6.sub: uvar: parameter not set
./errors6.sub: uvar: parameter null or not set
./errors6.sub: uvar: parameter null or not set
./errors6.sub: line 25: ${-3:-${-3}}: bad substitution
./errors6.sub: line 26: ${-3}: bad substitution
./errors6.sub: line 27: -3: invalid variable name
after indir: 1
./errors6.sub: line 30: -3: invalid variable name
./errors.tests: line 278: `!!': not a valid identifier
+11
View File
@@ -15,6 +15,17 @@ echo array after 1: $?' 2>/dev/null
${THIS_SH} -c 'typeset -A v ; v["0"]=one ; echo ${v[ ]}
echo array after 2: $?' 2>/dev/null
${THIS_SH} -c 'echo ${uvar?}' ./errors6.sub
${THIS_SH} -c 'echo ${uvar:?}' ./errors6.sub
export uvar=
${THIS_SH} -c 'echo ${uvar?}' ./errors6.sub
${THIS_SH} -c 'echo ${uvar:?}' ./errors6.sub
unset uvar
echo "${-3:-${-3}}"
echo ${-3}
x=-3; echo ${!x}
echo after indir: $?
function ivar() { echo -n "${!1:-${1}}"; }
ivar -3
+16
View File
@@ -417,3 +417,19 @@ declare -a var=([123]="")
declare -n ref="var[123]"
./nameref18.sub: line 54: declare: var[123]: not found
declare -a var=([123]="X")
declare -n foo="bar"
declare -- foo="bar"
./nameref19.sub: line 9: declare: bar: not found
declare -n foo="bar"
declare -- foo="bar"
declare -i bar="11"
declare -inx foo6
declare -ix foo6
declare -n foo="bar"
declare -- bar="Hello World!"
declare -- foo="bar"
declare -- bar="Hello World!"
declare -n foo="bar"
declare -- bar
declare -- foo="bar"
declare -- bar
+51
View File
@@ -0,0 +1,51 @@
# can we unset the nameref attribute on variables with values that reference
# unset variables?
unset bar
declare -n foo="bar"
declare -p foo
declare +n foo
declare -p foo bar
declare -n foo
declare -p foo
# let's try removing the nameref attribute -- other attributes and assignments
# apply to the nameref target
declare +n -i foo=7+4
declare -p foo bar
unset foo bar
# but if the nameref variable doesn't have a value, the attributes apply to
# the nameref variable itself. thanks ksh93
declare -n foo6
declare -xi foo6
declare -p foo6
# and when we remove the nameref attribute, the other attributes remain
declare +n foo6
declare -p foo6
unset foo6
# make sure these cases continue to work
# nameref referencing an existing, set variable
declare -n foo=bar
bar='Hello World!'
declare -p foo bar
declare +n foo
declare -p foo bar
unset foo bar
# nameref referencing an existing, unset variable
declare -n foo=bar
declare bar
declare -p foo bar
declare +n foo
declare -p foo bar
+9
View File
@@ -119,6 +119,15 @@ declare -ar i4=([0]="a" [1]="b" [2]="c")
declare -ar j4=([0]="1" [1]="2" [2]="3")
./varenv9.sub: line 66: unset: i4: cannot unset: readonly variable
./varenv9.sub: line 66: unset: j4: cannot unset: readonly variable
main: unset
inner: res unset
outer: res: X Y
main: after first call: X
inner: X
outer: res: X Y
main: after second call: X
func: null or unset
after func: x = outside
a=z
a=b
a=z
+3
View File
@@ -225,5 +225,8 @@ ${THIS_SH} ./varenv8.sub
# if executed in shell functions, like they modify local scalar variables
${THIS_SH} ./varenv9.sub
# more tests of unset and local variables with dynamic scoping
${THIS_SH} ./varenv10.sub
# make sure variable scoping is done right
tt() { typeset a=b;echo a=$a; };a=z;echo a=$a;tt;echo a=$a
+47
View File
@@ -0,0 +1,47 @@
#!/bin/bash
#
# various tests of unset when applied to variables at different local scopes
# function unsetting variable at previous local scope, uncovering global
inner()
{
unset res
echo ${FUNCNAME}: ${res-res unset}
if [[ $1 == "set" ]]; then
res[0]="X"
res[1]="Y"
fi
}
outer()
{
local res=
inner "$1"
echo ${FUNCNAME}: "res: ${res[@]}"
}
echo main: ${res-unset}
outer set
echo main: after first call: ${res-unset}
outer dontset
echo main: after second call: ${res-unset}
unset -f outer inner
unset res
# local scope, unset variable at the same scope as local declaration
func()
{
typeset x=4
unset x
echo ${FUNCNAME}: ${x:-null or unset}
}
x=outside
func
echo after func: x = $x
unset -f func
unset x