commit bash-20040923 snapshot

This commit is contained in:
Chet Ramey
2011-12-03 13:37:00 -05:00
parent 633e5c6dee
commit 22e63b05c8
53 changed files with 23378 additions and 4244 deletions
+1 -1
View File
@@ -95,6 +95,6 @@ trap: usage: trap [-lp] [arg signal_spec ...]
./errors.tests: line 246: kill: -s: option requires an argument
./errors.tests: line 248: kill: S: invalid signal specification
./errors.tests: line 250: kill: `': not a pid or valid job spec
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
./errors.tests: line 255: set: trackall: invalid option name
./errors.tests: line 262: `!!': not a valid identifier
+1 -1
View File
@@ -85,7 +85,7 @@ command: usage: command [-pVv] command [arg ...]
./errors.tests: line 213: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
./errors.tests: line 216: trap: NOSIG: invalid signal specification
./errors.tests: line 219: trap: -s: invalid option
trap: usage: trap [-lp] [[arg] signal_spec ...]
trap: usage: trap [-lp] [arg signal_spec ...]
./errors.tests: line 225: return: can only `return' from a function or sourced script
./errors.tests: line 229: break: 0: loop count out of range
./errors.tests: line 233: continue: 0: loop count out of range
+9 -9
View File
@@ -28,7 +28,7 @@ argv[3] = <d>
argv[4] = <e>
argv[5] = <f>
argv[1] = </usr/homes/chet>
argv[1] = </usr/homes/chet>
argv[1] = <~>
argv[1] = <~>
argv[1] = <\~>
argv[1] = <\ \~>
@@ -108,7 +108,7 @@ argv[3] = <c>
argv[4] = <d>
argv[5] = <e>
argv[6] = <f>
./more-exp.tests: line 269: abc=def: command not found
./more-exp.tests: line 272: abc=def: command not found
argv[1] = <a b c d e>
argv[1] = <a>
argv[2] = <b>
@@ -184,13 +184,13 @@ argv[1] = <1>
argv[1] = <5>
argv[1] = <5>
argv[1] = <0>
./more-exp.tests: line 420: ${#:}: bad substitution
./more-exp.tests: line 422: ${#/}: bad substitution
./more-exp.tests: line 424: ${#%}: bad substitution
./more-exp.tests: line 426: ${#=}: bad substitution
./more-exp.tests: line 428: ${#+}: bad substitution
./more-exp.tests: line 430: ${#1xyz}: bad substitution
./more-exp.tests: line 433: #: %: syntax error: operand expected (error token is "%")
./more-exp.tests: line 423: ${#:}: bad substitution
./more-exp.tests: line 425: ${#/}: bad substitution
./more-exp.tests: line 427: ${#%}: bad substitution
./more-exp.tests: line 429: ${#=}: bad substitution
./more-exp.tests: line 431: ${#+}: bad substitution
./more-exp.tests: line 433: ${#1xyz}: bad substitution
./more-exp.tests: line 436: #: %: syntax error: operand expected (error token is "%")
argv[1] = <0>
argv[1] = <a+b>
argv[1] = <+>
+214
View File
@@ -0,0 +1,214 @@
argv[1] = <aaa bbb ccc>
argv[1] = <aaa bbb ccc>
argv[1] = <baz:bar>
argv[1] = <baz:bar>
argv[1] = <aaa bbb ccc>
argv[1] = <bar>
argv[1] = <bar>
argv[1] = <bar>
argv[1] = <abcde>
argv[1] = <abcde>
argv[1] = <xyz>
argv[1] = <a b>
argv[2] = <c>
argv[3] = <d>
argv[4] = <e>
argv[5] = <f>
argv[1] = <a b>
argv[1] = <a>
argv[2] = <b>
argv[1] = <a b>
argv[2] = <c>
argv[3] = <d>
argv[4] = <e>
argv[5] = <f>
argv[1] = <a b>
argv[2] = <c>
argv[3] = <d>
argv[4] = <e>
argv[5] = <f>
argv[1] = </usr/homes/chet>
argv[1] = <~>
argv[1] = <~>
argv[1] = <\~>
argv[1] = <\ \~>
argv[1] = <\ \ \~>
argv[1] = </usr/homes/chet>
argv[1] = </usr/homes/chet>
argv[1] = </usr/homes/chet>
argv[1] = <$HOME>
argv[1] = <\ $HOME>
argv[1] = <\ \ $HOME>
argv[1] = <'bar'>
argv[1] = <'bar'>
argv[1] = <*@>
argv[1] = <*@>
argv[1] = <*@>
argv[1] = <*@>
argv[1] = <*@*>
argv[1] = <*@*>
argv[1] = <*@*>
argv[1] = <*@*>
argv[1] = <abcd>
argv[1] = <efghijkl>
argv[1] = <4>
argv[2] = <2>
argv[1] = <1>
argv[1] = <bar>
argv[1] = <2>
argv[1] = <bar>
argv[1] = <2>
argv[1] = <4>
argv[1] = <--\>
argv[2] = <-->
argv[1] = <--\^J-->
argv[1] = <--+\>
argv[2] = <+-->
argv[1] = <--+\^J+-->
argv[1] = <-+\>
argv[2] = <+-\>
argv[3] = <->
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <>
argv[1] = <>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <xy>
argv[1] = <>
argv[1] = <>
argv[1] = <x>
argv[1] = <x>
argv[1] = <>
argv[1] = <x>
argv[1] = <x>
argv[1] = <x>
argv[1] = <x>
argv[1] = <^?>
argv[1] = <^?>
argv[1] = <x>
argv[1] = <x>
argv[1] = <>
argv[2] = <abd>
argv[3] = <x>
argv[1] = <>
argv[2] = <abd>
argv[3] = <>
argv[1] = <a,b,c,d,e,f>
argv[1] = <a>
argv[2] = <b>
argv[3] = <c>
argv[4] = <d>
argv[5] = <e>
argv[6] = <f>
./more-exp.tests: line 272: abc=def: command not found
argv[1] = <a b c d e>
argv[1] = <a>
argv[2] = <b>
argv[3] = <c>
argv[4] = <d>
argv[5] = <e>
argv[1] = <foo)>
argv[1] = <a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\\a>
argv[1] = <a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\\a>
argv[1] = <a>
argv[1] = <a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <$a>
argv[1] = <\foo>
argv[1] = <$a>
argv[1] = <\foo>
argv[1] = <\$a>
argv[1] = <\\$a>
argv[1] = <a>
argv[1] = <a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <\a>
argv[1] = <G>
argv[2] = <{>
argv[3] = <I>
argv[4] = <K>
argv[5] = <}>
argv[1] = <hi>
argv[2] = <K>
argv[3] = <}>
argv[1] = <a*>
Number of args: 0
<${*-x}>: <x>
<${@-x}>: <x>
Number of args: 1
<${*-x}>: <>
<${@-x}>: <>
Number of args: 2
<${*-x}>: < >
<${@-x}>: < >
argv[1] = <5>
argv[1] = <5>
argv[1] = <5>
argv[1] = <5>
argv[1] = <5>
argv[1] = <0>
argv[1] = <0>
argv[1] = <0>
argv[1] = <0>
argv[1] = <0>
argv[1] = <0>
argv[1] = <posparams>
argv[1] = <posparams>
argv[1] = <2>
argv[1] = <0>
argv[1] = <0>
argv[1] = <1>
argv[1] = <5>
argv[1] = <5>
argv[1] = <0>
./more-exp.tests: line 420: ${#:}: bad substitution
./more-exp.tests: line 422: ${#/}: bad substitution
./more-exp.tests: line 424: ${#%}: bad substitution
./more-exp.tests: line 426: ${#=}: bad substitution
./more-exp.tests: line 428: ${#+}: bad substitution
./more-exp.tests: line 430: ${#1xyz}: bad substitution
./more-exp.tests: line 433: #: %: syntax error: operand expected (error token is "%")
argv[1] = <0>
argv[1] = <a+b>
argv[1] = <+>
argv[1] = <+>
argv[1] = <+>
argv[1] = <G { I >
argv[2] = <K>
argv[3] = <}>
argv[1] = <hi>
argv[2] = <K>
argv[3] = <}>
argv[1] = <xxx>
argv[2] = <yyy>
1
argv[1] = <>
argv[1] = <>
argv[1] = <>
argv[1] = <:a:>
argv[1] = <:b:>
argv[1] = <>
argv[1] = <>
+4 -1
View File
@@ -65,7 +65,10 @@ HOME=/usr/homes/chet
somevar=
expect "<$HOME>"
recho ${somevar:-~}
expect "<$HOME>"
# This changed after bash-3.0, when the tilde implementation was redone. It's
# not backward compatible, but it's very hard to be backward-compatible here,
# and I think the old behavior was a bug
expect '<~>'
recho "${somevar:-~}"
expect '<~>'
recho "${somevar:-"~"}"
+501
View File
@@ -0,0 +1,501 @@
expect()
{
echo expect "$@"
}
tool_var() {
eval $1=\"\${$1:-$2}\"
export $1
}
A="aaa bbb ccc"
unset B
tool_var B ${B:-"$A"}
expect '<aaa bbb ccc>'
recho "$A"
expect '<aaa bbb ccc>'
recho "$B"
eto_prepend() {
eval $1=\'$2\''${'$1':+":"${'$1'}}'; export $1
}
foo=bar; export foo
eto_prepend foo baz
expect '<baz:bar>'
recho $foo
expect '<baz:bar>'
recho ${foo-"bar"}
aa='aaa bbb ccc'
expect '<aaa bbb ccc>'
recho ${zzz-"$aa"}
expect '<bar>'
recho ${zzz:-"bar"}
expect '<bar>'
recho "${zzz:-bar}"
expect '<bar>'
recho "${zzz:-"bar"}"
var=abcde
expect '<abcde>'
recho "${var:-xyz}"
expect '<abcde>'
recho "${var:=xyz}"
expect '<xyz>'
recho "${var:+xyz}"
set 'a b' c d e f
expect '<a b> <c> <d> <e> <f>'
recho ${1+"$@"}
expect '<a b>'
recho "${1-"$@"}"
expect '<a> <b>'
recho ${1-"$@"}
expect '<a b> <c> <d> <e> <f>'
recho "${1+$@}"
expect '<a b> <c> <d> <e> <f>'
recho "${1+"$@"}"
HOME=/usr/homes/chet
somevar=
expect "<$HOME>"
recho ${somevar:-~}
expect "<$HOME>"
recho "${somevar:-~}"
expect '<~>'
recho "${somevar:-"~"}"
expect '<\~>'
recho "${somevar:-\~}"
expect '<\ \~>'
recho "${somevar:-\ \~}"
expect '<\ \ \~>'
recho "${somevar:-\ \ \~}"
expect "<$HOME>"
recho ${somevar:-$HOME}
expect "<$HOME>"
recho "${somevar:-$HOME}"
expect "<$HOME>"
recho "${somevar:-"$HOME"}"
expect '<$HOME>'
recho "${somevar:-\$HOME}"
expect '<\ $HOME>'
recho "${somevar:-\ \$HOME}"
expect '<\ \ $HOME>'
recho "${somevar:-\ \ \$HOME}"
foo=bar
expect "<'bar'>"
recho "${foo+'$foo'}"
expect "<'bar'>"
recho "${fox='$foo'}"
P='*@*'
expect '<*@>'
recho "${P%"*"}"
expect '<*@>'
recho "${P%'*'}"
expect '<*@>'
recho ${P%"*"}
expect '<*@>'
recho ${P%'*'}
expect '<*@*>'
recho ${P%""}
expect '<*@*>'
recho ${P#""}
expect '<*@*>'
recho ${P#"$foobar"}
expect '<*@*>'
recho ${P%"$foobar"}
s1=abcdefghijkl
s2=efgh
first=${s1/$s2*/}
expect '<abcd>'
recho $first
last=${s1##$first}
expect '<efghijkl>'
recho $last
shift $#
UNAME_RELEASE=${1:-4.2MP}
RELEASE=`expr "$UNAME_RELEASE" : '[^0-9]*\([0-9]*\)'` # 4
case "$RELEASE" in
"") RELEASE=0 ;;
*) RELEASE=`expr "$RELEASE" + 0` ;;
esac
REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1
REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2
expect '<4> <2>'
recho $RELEASE $REL_LEVEL $REL_SUBLEVEL
b1()
{
b2 ${1+"$@"}
}
b2()
{
recho $*
recho $#
}
expect '<1>'
b1 ''
expect '<bar> <2>'
b1 bar ''
expect '<bar> <2>'
b1 '' bar
expect '<4>'
b1 '' '' '' ''
NL="\\
"
NNL="+$NL+"
expect '<--\> <-->'
recho --$NL--
expect '<--\^J-->'
recho "--$NL--"
expect '<--+\> <+-->'
recho --$NNL--
expect '<--+\^J+-->'
recho "--$NNL--"
expect '<-+\> <+-\> <->'
recho -$NNL-$NL-
set ''
expect '<xy>'
recho "$*xy"
expect '<xy>'
recho "x$*y"
expect '<xy>'
recho "xy$*"
expect '<xy>'
recho x"$*"y
expect '<xy>'
recho xy"$*"
expect '<xy>'
recho "$*"xy
expect '<>'
recho "$*"
expect nothing
recho $*
unset undef ; set ""
expect '<>'
recho ${undef-"$*"}
expect '<xy>'
recho ${undef-"x$*y"}
expect '<xy>'
recho ${undef-"$*xy"}
expect '<xy>'
recho ${undef-"xy$*"}
expect '<xy>'
recho ${undef-x"$*"y}
expect '<xy>'
recho ${undef-xy"$*"}
expect '<xy>'
recho ${undef-"$*"xy}
expect '<>'
recho "${undef-$*}"
expect nothing
recho ${undef-$*}
expect '<>'
recho ${undef-"$zzz"}
expect '<x>'
recho x${undef-"$zzz"}
expect '<x>'
recho x${undef-"$@"}
expect nothing
recho ${undef-"$@"}
expect '<x>'
recho ${undef-"$zzz"}x
expect '<x>'
recho ${undef-"$@"}x
expect '<x>'
recho "$@"x
expect '<x>'
recho "$zzz"x
expect '<^?>'
recho ${undef-}
expect '<^?>'
recho ${undef-""}
yyy=""
recho "$xxx"x
recho "$yyy"x
set "" "abd" ""
recho "$@"x
recho "$@"$xxx
OIFS="$IFS"
arg=a,b,c,d,e,f
IFS=,
export z=$arg
eval z1=\"$arg\"
IFS="$OIFS"
recho $z
recho $z1
# should give an error
abc\=def
zz="a b c d e"
declare a=$zz
recho "$a"
recho $a
recho $(echo "foo$(echo ")")")
# test backslash escapes
recho \a
recho \\a
recho "\a"
recho "\\a"
recho '\a'
recho '\\a'
recho $(zecho \a)
recho $(zecho \\a)
recho $(zecho "\a")
recho $(zecho "\\a")
recho $(zecho '\a')
recho $(zecho '\\a')
recho `zecho \a`
recho `zecho \\a`
recho `zecho "\a"`
recho `zecho "\\a"`
recho `zecho '\a'`
recho `zecho '\\a'`
a=foo
recho \$a
recho \\$a
recho "\$a"
recho "\\$a"
recho '\$a'
recho '\\$a'
recho $(zecho `zecho \a`)
recho $(zecho `zecho \\a`)
recho $(zecho `zecho "\a"`)
recho $(zecho `zecho "\\a"`)
recho $(zecho `zecho '\a'`)
recho $(zecho `zecho '\\a'`)
# should echo G { I K }
recho ${abc:-G { I } K }
abc=hi
# should echo hi K }
recho ${abc:-G { I } K }
# should echo a*
unset foo
recho "${foo:-"a"}*"
f ()
{
echo "Number of args: $#"
echo "<\${*-x}>: <${*-x}>"
echo "<\${@-x}>: <${@-x}>"
}
f
f ''
f '' ''
set 1 2 3 4 5
expect '<5>'
recho ${#}
expect '<5>'
recho ${#:foo}
expect '<5>'
recho ${#:-foo}
expect '<5>'
recho ${#-posparams}
expect '<5>'
recho ${#:-posparams}
expect '<0>'
recho ${#!}
expect nothing
recho $!
expect nothing
recho ${!}
expect nothing
recho $8
expect nothing
recho ${8}
shift $#
expect '<0>'
recho ${#}
expect '<0>'
recho ${#:foo}
expect '<0>'
recho ${#:-foo}
expect '<0>'
recho ${#-posparams}
expect '<0>'
recho ${#:-posparams}
expect '<posparams>'
recho ${!-posparams}
expect '<posparams>'
recho ${!:-posparams}
expect '<2>'
recho ${#-}
expect '<0>'
recho ${#-posparams}
expect '<0>'
recho ${#?:-xyz}
expect '<1>'
recho ${#?}
set a b c d e
expect '<5>'
recho ${#}
expect '<5>'
recho ${#?:-xyz}
shift $#
expect '<0>'
recho ${#:-foo}
expect a bad substitution error
recho ${#:}
expect a bad substitution error
recho ${#/}
expect a bad substitution error
recho ${#%}
expect a bad substitution error
recho ${#=}
expect a bad substitution error
recho ${#+}
expect a bad substitution error
recho ${#1xyz}
expect a math syntax error
recho ${#:%}
expect '<0>'
recho ${#:-}
set --
unset a b
x=a
y=b
IFS=+
expect '<a+b>'
recho $x+$y
expect '<+>'
recho $a+$b
expect '<+>'
recho + "$@"
expect '<+>'
recho +"$@"
# variants of nested curly braces inside ${...} expressions
# IFS is not the standard one
expect '<G { I>' '<K>' '<}>'
recho ${gik:-G { I } K }
abc=hi
expect '<hi>' '<K>' '<}>'
recho ${abc:-G { I } K }
# reset IFS to the default
IFS='
'
# nested ${...} inside ${...} are handled specially
unset XXX FOO BAR
expect '<xxx>' '<yyy>'
XXX=xxx
FOO=${BAR:-${XXX} yyy}
recho $FOO
# this was a bug in versions of bash prior to bash-2.04-release
set -- ''
expect 1
echo $#
expect '<>'
recho "${@}"
expect '<>'
recho "${@-}"
expect '<>'
recho "${@:-}"
# this was a bug in bash-2.04, fixed in 2.05
set -- a b
expect '<:a:>' '<:b:>'
for i in "${@-}"; do recho :$i:; done
# I believe that ksh93 does these wrong -- we're using the rhs, so shouldn't
# it behave the same as ""?
set --
expect '<>'
recho "${@-}"
expect '<>'
recho "${@:-}"