Pour créer un tableau, il faut entourer une liste de valeurs avec des parenthèses.
Ou on peut créer un intervalle avec des accolades.
Pour que deux valeurs soient deux éléments distincts du tableau, elles doivent être séparées par un caractère de délimitation contenu dans la variable d’environnement IFS. La valeur par défaut de $IFS est ‘ \t\n’ (espace, tabulation et retour à la ligne).
$ printf "%q\n" "$IFS"
$' \t\n'
OLDIFS="$IFS"
IFS=':'
desktop=
for val in $XDG_CURRENT_DESKTOP; do
for d in 'GNOME' 'MATE' 'UKUI' 'Unity'; do
[ "$d" = "$val" ] && { desktop="$d"; break 2; }
done
done
IFS="$OLDIFS"
array=(a b c) | Affecte les valeurs "a", "b" et "c" au tableau array. Entourer de parenthèses permet de mettre les valeurs dans un tableau.
|
---|---|
range={1..10} | Prend les valeurs de 1 à 10
|
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[0]} $array |
Retourne la première valeur de array
|
${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[@]} | Retourne chaque valeur de array, l'une après l'autre : "var1" "var2" "var3"
|
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
${array[@]:0:3} | Retourne les 3 premières valeurs de array
|
---|---|
${!array[@]} | Retourne les index du tableau
|
${array[@]// } | Retourne les valeurs du tableau en supprimant tous les espaces des valeurs
|
${array[@]^^} | Retourne les valeurs du tableau en mettant tous les caractères en majuscule
|
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
|
---|---|
list[$c,0]="val" | Assigne une valeur à un index. Index séparés par des virgules s'il y en a plusieurs
|
${list[$c,0]} | Retourne la valeur d'un index
|
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