# This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # a set of tests for associative arrays in arithmetic contexts declare -A assoc key='x],b[$(echo uname >&2)' (( assoc[$key]++ )) declare -p assoc (( assoc['$key']++ )) declare -p assoc (( assoc["$key"]++ )) declare -p assoc declare -A assoc (( 'assoc[$key]++' )) declare -p assoc (( 'assoc[$key]'++ )) declare -p assoc (( "assoc[$key]++" )) declare -p assoc unset assoc typeset -A a b="80's" ((++a[$b])) ((++a["$b"])) [[ $((++a[$b])) ]] [[ $((++a["$b"])) ]] echo ${a[$b]} unset a declare -A A string=abcdefghijklmnopqrstuvwxyz echo ${string:10:10} k1='%' k2='$(echo %)' A[%]=10 A[']']=10 A[$k2]=5 k3=']' echo ${string:A[%]:A[$k1]} echo ${string:A[%]:A[$k2]} echo ${string:A[%]:A[$k3]} declare -p A unset A string key key='~' declare -A A A[$key]=42 declare -p A echo $(( A[$key]++ )) declare -p A key='~0' A[$key]=42 echo $(( A[$key]++ )) declare -p A declare -a a key='~-2' a[0]=12 a[$key]=42 echo $(( a[7<(4+2)] )) declare -p a unset A a key declare -A A declare -a a sString="devel packager's guide" i=2 A["$sString"]=$i a[$i]=$sString echo "${A[${a[i]}]}" echo ${A["${a[i]}"]} unset A a #LANG=C unset var assoc var=\'\] declare -Ai assoc assoc[$var]=1 assoc[$var]+=1 ((assoc['$var']++)) ((assoc[$var]++)) typeset -p assoc unset assoc declare -A assoc key1='` echo >&2 foo`' key2='$( echo >&2 bar)' assoc[$key1]=42 assoc[$key2]=63 echo $(( assoc[$key1] + assoc[$key2] )) declare -p assoc unset assoc declare -a a key='x],b[$(echo uname >&2)' a[$key]=42 expr='a[$key]' (( $expr )) echo $? echo $(( $expr )) echo $? echo $(( expr )) echo $? (( expr )) echo $? ${THIS_SH} ./quotearray1.sub ${THIS_SH} ./quotearray2.sub ${THIS_SH} ./quotearray3.sub # behavior of builtins with array subscripts @ and * ${THIS_SH} ./quotearray4.sub # behavior of unset with quoted and unquoted array arguments ${THIS_SH} ./quotearray5.sub