mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-07-09 13:10:50 +02:00
commit bash-20180309 snapshot
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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" )
|
||||
|
||||
@@ -400,3 +400,4 @@ ${THIS_SH} ./array21.sub
|
||||
${THIS_SH} ./array22.sub
|
||||
${THIS_SH} ./array23.sub
|
||||
${THIS_SH} ./array24.sub
|
||||
${THIS_SH} ./array25.sub
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user