Define Array Variable
# Define array
set -A VAR1 V11 V12 # define an array VAR1 contains 2 element: V11 and V12
VAR2[2]=V22 # define an array VAR2 contains 1 element: V22
VAR3=(V31 V32 V33) # define an array VAR3 contains 3 element: V31, V32, and V33
Get Array Size
echo ${#VAR1[*]} # 2
echo ${#VAR2[*]} # 1
echo ${#VAR3[*]} # 3
Notice: this is the occupied size, without idle slot; for example
Get Array Element List
# Get array elements list
echo ${VAR1[*]} # V11 V12
echo ${VAR2[*]} # V22
echo ${VAR3[*]} # V31 V32 V33
Refer Array Element
echo ${VAR1[0]} # V11
echo ${VAR1[1]} # V12
echo ${VAR2[0]} # null, because VAR2[0] is not defined
echo ${VAR2[1]} # null, because VAR2[1] is not defined
echo ${VAR2[2]} # V22
echo ${VAR3[0]} # V31
echo ${VAR3[1]} # V32
# Notice: array index start from 0, and VAR[0] == VAR
echo $VAR1 # V11
echo $VAR2 # null, because VAR2[0] is not defined
echo $VAR3 # V31
Assign Array Element
VAR4=(AAA BBB CCC)
VAR4[1]=DDD
echo ${VAR4[*]} # AAA DDD CCC
# Array (not element) assignment
VAR5=(AAA BBB)
VAR5+=(CCC DDD)
echo ${VAR5[*]} # AAA BBB CCC DDD
Traverse An Array
VARV=(AAA BBB CCC)
for e in ${VARV[*]}; do
echo "element=$e";
done
# case 2
i=0
while [ $i -lt ${#COLORS[@]} ]
do
print ${COLORS[$i]}
(( i=i+1 ))
done
Associative Array
# Define associative array
typeset -A VARA1
VARA1["aa"]="AAAA"
VARA1["bb"]="BBBB"
VARA2=(
["cc"]="CCCC"
["dd"]="DDDD"
)
Array Elements List and Index List
echo ${VARA1[@]} # AAAA BBBB
echo ${!VARA2[@]} # cc dd
Access an element
# Access an element
echo ${VARA1[aa]} # AAAA
echo ${VARA2["dd"]} # DDDD
Loop elements
# Loop elements
for e in "${!VARA2[@]}"
do
echo "VARA2[$e]=${VARA2[$e]}"
done
Notice:
Associative array cannot use index to access an element any more.
COLORS[0] will not get the value of COLORS[AA]
Usage Sample
# Array indices start from 0, it cannot be a negative value.
# Array can have empty slots, it's not necessary that all elements are consecutive.
X=Sun # X is a general variable
X[1]=Mon # X is transformed into an array variable.
# The original assignment to variable X is assigned X[0].
X[2]=Tue
X[6]=Sat # Here X has 4 elements, X[0], X[1], X[2], X[6];
# X[3], X[4], X[5] is empty slot.
# Array length ${#X[@]} will return value 4
# Loop array using indices
# Output:
# num=4
# X[0]=Sun
# X[1]=Mon
# X[2]=Tue
# X[3]=
# X[4]=
# Notices:
# Though X[6] is a valid value, it does not show in the loop because
# its indice 6 is out array size 4.
num=${#X[@]}
echo "num=$num"
for i in {0..$num}
do
echo "X[$i]="${X[$i]}
done
# Loop array using elements
# Output:
# Sun
# Mon
# Tue
# Sat
for var in ${X[*]}
do
echo $var
done
# Delete an array element, using unset
# Output:
# num=3
# Sun
# Mon
# Sat
unset X[2]
num=${#X[@]}
echo "num=$num"
for var in ${X[*]}
do
echo $var;
done