Tableau

Tableau

Créer un tableau

Afficher une valeur

On peut accéder à la valeur d’un index avec ${array[i]}.
On peut accéder à toutes les valeurs du tableau avec ${array[@]} ou ${array[*]}.

             
${#array[@]} Retourne la longueur de array
$ array=("a a" b "c c" d)
$ echo "${#array}"
3
${array[0]}
$array
Retourne la première valeur de array
$ array=("a a" b "c c" d)
$ echo "${array[0]}"
a a
${array[*]} Retourne l'ensemble des valeurs de array, séparées par le premier caractère de IFS (par défaut espace) : "var1 var2 var3"
$ array=("a a" b "c c" d)
$ for i in "${array[*]}"; do echo - $i; done
- a a b c c d

${array[@]} Retourne chaque valeur de array, l'une après l'autre : "var1" "var2" "var3"
$ array=("a a" b "c c" d)
$ for i in "${array[@]}"; do echo - $i; done
- a a
- b
- c c
- d

Si les valeurs du tableau contiennent des caractères de délimitation, il faut les échapper à la lecture et à l’écriture.

$ array=("a a" b "c c" d)
$ echo ${#array}
3
$ for i in ${array[@]}; do echo - $i; done
- a
- a
- b
- c
- c
- d
$
$ for i in "${array[@]}"; do echo - $i; done
- a a
- b
- c c
- d

Interpolation

             
${array[@]:0:3} Retourne les 3 premières valeurs de array
$ array=("a a" b "c c" d)
echo "${array[@]:0:3}"
a a b c c
${!array[@]} Retourne les index du tableau
$ array=("a a" b "c c" d)
$ for i in "${!array[@]}"; do echo $i": "${array[@]:$i:1}; done
0: a a
1: b
2: c c
3: d

${array[@]// } Retourne les valeurs du tableau en supprimant tous les espaces des valeurs
$ array=("a a" b "c c" d)
$ echo ${array[@]// }
aa b cc d
  
${array[@]^^} Retourne les valeurs du tableau en mettant tous les caractères en majuscule
$ array=("a a" b "c c" d)
$ echo ${array[@]^^}
A A B C C D

Tableau associatif

Bash permet également de déclarer des tableaux associatifs.
Un tableau associatif n’est pas ordonné, si l’ordre est important il faut stocker l’ordre des index à part.

             
declare -A list Déclare un tableau associatif — il est possible d'ajouter des index après ou pendant la déclaration
declare -A list=(
["00:00:00"]="Track 1"
["00:07:04"]="Track 2"
["00:11:23"]="Track 3"
["00:15:30"]="Track 4"
)
list[$c,0]="val" Assigne une valeur à un index.
Index séparés par des virgules s'il y en a plusieurs
list["00:19:40"]="Track 5"
${list[$c,0]} Retourne la valeur d'un index
for time in ${!list[@]}; do echo $time": "${list[$time]}; done
# 00:00:00: Track 1
# 00:15:30: Track 4
# 00:11:23: Track 3
# 00:19:40: Track 5
# 00:07:04: Track 2

Exemple:

declare -A list=(
["00:00:00"]="Track 1"
["00:07:04"]="Track 2"
["00:11:23"]="Track 3"
["00:15:30"]="Track 4"
)

order=$(sort -n -t":" -k1 -k2 -k3 <<< "${!list[*]}")
for time in ${order[@]}
do
    echo $time": "${list[$time]}
done
# 00:00:00: Track 1
# 00:07:04: Track 2
# 00:11:23: Track 3
# 00:15:30: Track 4