= Associative array !
Apostolos rootApostolos@swarmlab.io
// Metadata:
:description: Intro and Install
:keywords: Linux, apt
:data-uri:
:toc: right
:toc-title: Πίνακας περιεχομένων
:toclevels: 4
:source-highlighter: highlight
:icons: font
:sectnums: 



{empty} +



.NOTE
[NOTE]
====
Assuming you're already logged in
====

== Associative array, dictionary or map 


===  Exercise

- vim testfile.sh
- copy-paste
- chmod +x ./testfile.sh
- ./testfile.sh

[source,bash]
----

#!/bin/bash

bash --version   # Must be at least version 4 to have associative arrays

declare -A array=(
  [1,0]="first name"
  [1,1]="second name"
  [2,0]="third name"
  [3,0]="foo bar"
  [test 1]="test bar"
  )

var=$(cat <<EOF
declare -A array=(
  [1,0]="first name"
  [1,1]="second name"
  [2,0]="third name"
  [3,0]="foo bar"
  [test 1]="test bar"
  )
EOF
)

echo "$var"

echo ' count with ${#array[@]} result:'
echo ${#array[@]}

echo ""
echo ""
cat <<'EOF'
  ----------------------------------------------------------
        for with "${!array[@]}"
  ----------------------------------------------------------
for i in "${!array[@]}"; do
        echo "$i => ${array[$i]}";
done

    "result: "
EOF

for i in "${!array[@]}"; do
        echo "$i => ${array[$i]}";
done

echo ""
echo ""

cat <<'EOF'
  ----------------------------------------------------------
                for with ${!array[@]}
  ----------------------------------------------------------
for i in ${array[@]}; do
        echo "$i => ${array[$i]}";
done

    "result: "
EOF

for i in ${array[@]}; do
        echo "$i => ${array[$i]}";
done


echo ""
echo ""

cat <<'EOF'
  ----------------------------------------------------------
        for with "${!array[*]}"
  ----------------------------------------------------------
for i in "${!array[*]}"; do
        echo "$i => ${array[$i]}";
done

    "result: "
EOF

for i in "${!array[*]}"; do
        echo "$i => ${array[$i]}";
done

echo ""
echo ""

cat <<'EOF'
  ----------------------------------------------------------
        for with ${!array[*]}
  ----------------------------------------------------------

for i in ${!array[*]}; do
        echo "$i => ${array[$i]}";
done

    "result: "
EOF

for i in ${!array[*]}; do
        echo "$i => ${array[$i]}";
done

echo ""
echo ""

cat <<'EOF'
  ----------------------------------------------------------
        we can get the value of the '1,0' key as array
  ----------------------------------------------------------
        declare -a names=(${array[1,0]})
EOF

declare -a names=(${array[1,0]})

echo ""
echo ""
cat <<EOF


Variable names now contains array:
echo \$names
result:  $names

echo \${names[1]}
result: ${names[1]}

EOF

echo ' count with ${#names[@]} result:'
echo ${#names[@]}

echo ""
echo ""

cat <<'EOF'
  ----------------------------------------------------------
        Testing whether a value is missing from an associative array
  ----------------------------------------------------------
if [ ${array[1,0]+_} ]; then
        echo "Found";
else
        echo "Not found";
fi

EOF
if [ ${array[1,0]+_} ]; then
        echo "Found";
else
        echo "Not found";
fi

echo ""
echo ""

echo "----------------------------------------------------------"
echo "indexing"
echo "----------------------------------------------------------"
echo 'KEYS=("${!array[@]}")      # Make a normal array containing all the keys in the associative array'

KEYS=("${!array[@]}")
echo ""

echo 'echo ${KEYS[0]}            # Find a key via an index'
echo ${KEYS[0]}
echo ""

echo 'echo ${array[${KEYS[0]}]}  # Find a value via an index'
echo ${array[${KEYS[0]}]}

echo ""
echo "----------------------------------------------------------"
echo "remove key"
echo "----------------------------------------------------------"
echo ""
echo 'unset array["test 1"]    # You must quote keys containing spaces when you unset in an associative array'
unset array["test 1"]
echo ""
echo ' count with ${#array[@]} result:'
echo ${#array[@]}
echo ""



echo "----------------------------------------------------------"
echo ' remove all with "unset array" '
echo "----------------------------------------------------------"
unset array

echo ' count with ${#array[@]} result:'
echo ${#array[@]}
----


=== create

[source,bash]
----
declare -A array=(
  [1,0]="first name"
  [1,1]="second name"
  [2,0]="third name"
  [3,0]="foo bar"
  [test 1]="test bar"
  )
----

=== for

[source,bash]
----
for i in "${!array[@]}"; do
        echo "$i => ${array[$i]}";
done
----


=== create from array

[source,bash]
----
        declare -a names=(${array[1,0]})
----


=== test

[source,bash]
----
if [ ${array[1,0]+_} ]; then
        echo "Found";
else
        echo "Not found";
fi
----


=== indexing

[source,bash]
----
KEYS=("${!array[@]}")
echo ${array[${KEYS[0]}]}
----


=== unset key

[source,bash]
----
unset array["test 1"]
----



=== unset all

[source,bash]
----
unset array
----