164 lines
2.5 KiB
Text
164 lines
2.5 KiB
Text
# 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 <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# 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
|