mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-23 04:30:24 +02:00
Parameter repairs, mostly for subscripting.
This commit is contained in:
parent
585c21a393
commit
220ad9aa23
7 changed files with 242 additions and 51 deletions
130
Test/D06subscript.ztst
Normal file
130
Test/D06subscript.ztst
Normal file
|
@ -0,0 +1,130 @@
|
|||
# Test parameter subscripting.
|
||||
|
||||
%prep
|
||||
|
||||
s='Twinkle, twinkle, little *, [how] I [wonder] what? You are!'
|
||||
a=('1' ']' '?' '\2' '\]' '\?' '\\3' '\\]' '\\?' '\\\4' '\\\]' '\\\?')
|
||||
typeset -g -A A
|
||||
A=($a)
|
||||
|
||||
%test
|
||||
|
||||
x=','
|
||||
print $s[(i)winkle] $s[(I)winkle]
|
||||
print ${s[(i)You are]} $#s
|
||||
print ${s[(r)$x,(R)$x]}
|
||||
0:Scalar pattern subscripts without wildcards
|
||||
>2 11
|
||||
>53 60
|
||||
>, twinkle, little *,
|
||||
|
||||
x='*'
|
||||
print $s[(i)*] $s[(i)\*] $s[(i)$x*] $s[(i)${(q)x}*] $s[(I)$x\*]
|
||||
print $s[(r)?,(R)\?] $s[(r)\?,(R)?]
|
||||
print $s[(r)\*,(R)*]
|
||||
print $s[(r)\],(R)\[]
|
||||
0:Scalar pattern subscripts with wildcards
|
||||
>1 26 1 26 26
|
||||
>Twinkle, twinkle, little *, [how] I [wonder] what? ? You are!
|
||||
>*, [how] I [wonder] what? You are!
|
||||
>] I [
|
||||
|
||||
# $s[(R)x] actually is $s[0], but zsh treats 0 as 1 for subscripting.
|
||||
print $s[(i)x] : $s[(I)x]
|
||||
print $s[(r)x] : $s[(R)x]
|
||||
0:Scalar pattern subscripts that do not match
|
||||
>61 : 0
|
||||
>: T
|
||||
|
||||
print -R $s[$s[(i)\[]] $s[(i)$s[(r)\*]] $s[(i)${(q)s[(r)\]]}]
|
||||
0:Scalar subscripting using a pattern subscript to get the index
|
||||
>[ 1 33
|
||||
|
||||
print -R $a[(r)?] $a[(R)?]
|
||||
print $a[(n:2:i)?] $a[(n:2:I)?]
|
||||
print $a[(i)\?] $a[(I)\?]
|
||||
print $a[(i)*] $a[(i)\*]
|
||||
0:Array pattern subscripts
|
||||
>1 ?
|
||||
>2 2
|
||||
>3 3
|
||||
>1 13
|
||||
|
||||
# It'd be nice to do some of the following with (r), but we run into
|
||||
# limitations of the ztst script parsing of backslashes in the output.
|
||||
print -R $a[(i)\\\\?] $a[(i)\\\\\?]
|
||||
print -R $a[(i)\\\\\\\\?] $a[(i)\\\\\\\\\?]
|
||||
print -R ${a[(i)\\\\\\\\?]} ${a[(i)\\\\\\\\\?]}
|
||||
print -R "$a[(i)\\\\\\\\?] $a[(i)\\\\\\\\\?]"
|
||||
print -R $a[(i)\]] $a[(i)\\\\\]] $a[(i)\\\\\\\\\]] $a[(i)\\\\\\\\\\\\\]]
|
||||
print -R $a[(i)${(q)a[5]}] $a[(i)${(q)a[8]}] $a[(i)${(q)a[11]}]
|
||||
print -R $a[(i)${a[3]}] $a[(i)${a[6]}] $a[(i)${a[9]}] $a[(i)${a[12]}]
|
||||
0:Array pattern subscripts with multiple backslashes
|
||||
>4 6
|
||||
>7 9
|
||||
>7 9
|
||||
>7 9
|
||||
>2 5 8 11
|
||||
>5 8 11
|
||||
>1 3 4 6
|
||||
|
||||
print -R $A[1] $A[?] $A[\\\\3] $A[\\\]]
|
||||
print -R $A[$a[11]]
|
||||
print -R $A[${(q)a[5]}]
|
||||
0:Associative array lookup (direct subscripting)
|
||||
>] \2 \\] \?
|
||||
>\\\?
|
||||
>\\\?
|
||||
|
||||
# The (o) is necessary here for predictable output ordering
|
||||
print -R $A[(I)\?] ${(o)A[(I)?]}
|
||||
print -R $A[(i)\\\\\\\\3]
|
||||
print -R $A[(I)\\\\\\\\\?] ${(o)A[(I)\\\\\\\\?]}
|
||||
0:Associative array lookup (pattern subscripting)
|
||||
>? 1 ?
|
||||
>\\3
|
||||
>\\? \\3 \\?
|
||||
|
||||
print -R $A[(R)\?] : ${(o)A[(R)?]}
|
||||
print -R $A[(R)\\\\\?] ${(o)A[(R)\\\\?]} ${(o)A[(R)\\\\\?]}
|
||||
print -R ${(o)A[(R)\\\\\\\\\]]}
|
||||
0:Associative array lookup (reverse subscripting)
|
||||
>: ]
|
||||
>\? \2 \? \?
|
||||
>\\]
|
||||
|
||||
x='*'
|
||||
A[$x]=xstar
|
||||
A[${(q)x}]=qxstar
|
||||
print -R ${(k)A[(r)xstar]} $A[$x]
|
||||
print -R ${(k)A[(r)qxstar]} $A[${(q)x}]
|
||||
# A[*] is interpreted specially, assignment to it fails silently (oops)
|
||||
A[*]=star
|
||||
A[\*]=backstar
|
||||
print -R ${(k)A[(r)star]} $A[$x]
|
||||
print -R ${(k)A[(r)backstar]} $A[\*]
|
||||
0:Associative array assignment
|
||||
>* xstar
|
||||
>\* qxstar
|
||||
>xstar
|
||||
>\* backstar
|
||||
|
||||
o='['
|
||||
c=']'
|
||||
A[\]]=cbrack
|
||||
A[\[]=obrack
|
||||
A[\\\[]=backobrack
|
||||
A[\\\]]=backcbrack
|
||||
print -R $A[$o] $A[$c] $A[\[] $A[\]] $A[\\\[] $A[\\\]]
|
||||
print -R $A[(i)\[] $A[(i)\]] $A[(i)\\\\\[] $A[(i)\\\\\]]
|
||||
0:Associative array keys with open and close brackets
|
||||
>obrack cbrack obrack cbrack backobrack backcbrack
|
||||
>[ ] \[ \]
|
||||
|
||||
print -R $A[$o] $A[$s[(r)\[]]
|
||||
print -R $A[(r)$c] $A[(r)$s[(r)\]]]
|
||||
print -R $A[$A[(i)\\\\\]]]
|
||||
0:Associative array lookup using a pattern subscript to get the key
|
||||
>obrack obrack
|
||||
>] ]
|
||||
>backcbrack
|
Loading…
Add table
Add a link
Reference in a new issue