mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-12-29 16:25:35 +01:00
154 lines
3.2 KiB
Text
154 lines
3.2 KiB
Text
# Test parameter expansion with namespace syntax
|
|
# (heavily borrowed from D04parameter.ztst)
|
|
|
|
%prep
|
|
|
|
%test
|
|
|
|
.k02.foo='the first parameter'
|
|
.k02.bar='the second parameter'
|
|
print -l $.k02.foo ${.k02.bar}
|
|
0:Basic scalars with namespace
|
|
F:Braces are required
|
|
>$.k02.foo
|
|
>the second parameter
|
|
|
|
typeset .k02.bar='the second parameter'
|
|
print -l ${.k02.bar}
|
|
0:Scalar but with typeset
|
|
>the second parameter
|
|
|
|
.k02.array1=(the first array)
|
|
.k02.array2=(the second array)
|
|
print -l $.k02.array1 ${.k02.array2}
|
|
0:Basic arrays with namespace
|
|
>$.k02.array1
|
|
>the
|
|
>second
|
|
>array
|
|
|
|
typeset -a .k02.array2=(the second array)
|
|
print -l ${.k02.array2}
|
|
0:Array but with typeset
|
|
>the
|
|
>second
|
|
>array
|
|
|
|
setopt ksharrays
|
|
print -l ${.k02.array2}
|
|
unsetopt ksharrays
|
|
0:Basic ksharray with namespace
|
|
>the
|
|
|
|
setopt shwordsplit
|
|
print -l ${.k02.foo} ${==.k02.bar}
|
|
unsetopt shwordsplit
|
|
0:Basic shwordsplit with namespace
|
|
>the
|
|
>first
|
|
>parameter
|
|
>the second parameter
|
|
|
|
print ${+.k02.foo} ${+.k02.notappearinginthistest}
|
|
0:$+... and namespace
|
|
>1 0
|
|
|
|
.k02.x=()
|
|
print ${+.k02.x} ${+.k02.x[1]} ${+.k02.x[(r)foo]} ${+.k02.x[(r)bar]}
|
|
.k02.x=(foo)
|
|
print ${+.k02.x} ${+.k02.x[1]} ${+.k02.x[(r)foo]} ${+.k02.x[(r)bar]}
|
|
0:$+... with arrays and namespace
|
|
>1 0 0 0
|
|
>1 1 1 0
|
|
|
|
# See D04 for complete explanation.
|
|
# For K02 we're just testing that flag syntax works.
|
|
.k02.foo='<five> {six} (seven) >eight< }nine{ |forty-two| $many$ )ten( more'
|
|
.k02.array=(${(z).k02.foo})
|
|
print -l ${(Q).k02.array}
|
|
0:${(z)...} and ${(Q)...} for some hard to parse cases
|
|
><
|
|
>five
|
|
>>
|
|
>{six}
|
|
>(
|
|
>seven
|
|
>)
|
|
>>
|
|
>eight
|
|
><
|
|
>}nine{
|
|
>|
|
|
>forty-two
|
|
>|
|
|
>$many$
|
|
>)
|
|
>ten( more
|
|
|
|
.k02.array=(characters in an array)
|
|
print ${(c)#.k02.array}
|
|
0:${(c)#...}
|
|
>22
|
|
|
|
() {
|
|
typeset -n .k02.ref=.k02.array
|
|
emulate -L ksh
|
|
print -l ${!.k02.ref} ${(!).k02.ref} ${.k02.ref}
|
|
}
|
|
0:namerefs with namespaces
|
|
>.k02.array
|
|
>.k02.array
|
|
>characters
|
|
|
|
k.=empty
|
|
k.2=test
|
|
print ${k.} ${k.2}
|
|
0:Parse without leading dot (future proofing)
|
|
>empty test
|
|
|
|
.k=OK
|
|
print ${.k}
|
|
0:Bare namespace is usable (ksh compatibility)
|
|
>OK
|
|
|
|
.k.=empty
|
|
1:Namespace must precede an identifier, assignment
|
|
?(eval):1: not an identifier: .k.
|
|
|
|
typeset .k.=empty
|
|
1:Namespace must precede an identifier, typeset
|
|
?(eval):typeset:1: not valid in this context: .k.
|
|
|
|
print ${.k.}
|
|
1:Namespace must precede an identifier, reference
|
|
?(eval):1: bad substitution
|
|
|
|
.2.b=not
|
|
1:Namespace identifier must not begin with a digit, assignment
|
|
?(eval):1: not an identifier: .2.b
|
|
|
|
typeset .2.b=not
|
|
1:Namespace identifier must not begin with a digit, typeset
|
|
?(eval):typeset:1: not valid in this context: .2.b
|
|
|
|
print ${.2.b}
|
|
1:Namespace identifier must not begin with a digit, reference
|
|
?(eval):1: bad substitution
|
|
|
|
.not.2b=question
|
|
1:Identifier starting with a digit must be all digits, assignment
|
|
?(eval):1: not an identifier: .not.2b
|
|
|
|
typeset .not.2b=question
|
|
1:Identifier starting with a digit must be all digits, typeset
|
|
?(eval):typeset:1: not valid in this context: .not.2b
|
|
|
|
print ${.not.2b}
|
|
1:Identifier starting with a digit must be all digits, reference
|
|
?(eval):1: bad substitution
|
|
|
|
integer .var.d=0
|
|
float .var.f=.2
|
|
print $((.var.x = ++.var.d - -.var.f))
|
|
0:Namespaces in math context
|
|
>1.2
|