# 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 \? \? >\\] eval 'A[*]=star' 1:Illegal associative array assignment ?ZTST_execchunk:2: A: attempt to set slice of associative array 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[(e)*]=star A[\*]=backstar print -R ${(k)A[(r)star]} $A[(e)*] print -R ${(k)A[(r)backstar]} $A[\*] 0:Associative array assignment >* xstar >\* qxstar >* star >\* 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 print -R ${A[${A[(r)\\\\\\\\\]]}]::=zounds} print -R ${A[${A[(r)\\\\\\\\\]]}]} print -R $A[\\\\\]] 0:Associative array substitution-assignment with reverse pattern subscript key >zounds >zounds >zounds print -R ${(o)A[(K)\]]} print -R ${(o)A[(K)\\\]]} 0:Associative array keys interpreted as patterns >\2 backcbrack cbrack star >\\\4 \\\? star zounds typeset -g "A[one\"two\"three\"quotes]"=QQQ typeset -g 'A[one\"two\"three\"quotes]'=qqq print -R "$A[one\"two\"three\"quotes]" print -R $A[one\"two\"three\"quotes] A[one"two"three"four"quotes]=QqQq print -R $A[one"two"three"four"quotes] print -R $A[$A[(i)one\"two\"three\"quotes]] print -R "$A[$A[(i)one\"two\"three\"quotes]]" 0:Associative array keys with double quotes >QQQ >qqq >QqQq >qqq >QQQ print ${x::=$A[$A[(i)one\"two\"three\"quotes]]} print $x print ${x::="$A[$A[(i)one\"two\"three\"quotes]]"} print $x 0:More keys with double quotes, used in assignment-expansion >qqq >qqq >QQQ >QQQ qqq=lower QQQ=upper print ${(P)A[one\"two\"three\"quotes]} print "${(P)A[$A[(i)one\"two\"three\"quotes]]}" 0:Keys with double quotes and the (P) expansion flag >lower >upper