# Tableaux en bash



#### Création d'un tableau (et initialisation):

##### Tableau indicé:

```bash
$ tableau_indi=( "un" "deux" "trois" "quatre" )
```

Les indices sont assignés automatiquement, à partir de 0.

```bash
$ tableau_indi=( "chene" "erable" [5]="saule" "hetre"
```

chene à l'indice 0, érable le 2, saule le 5, hetre le 7. Les indices 3 et 4 sont des chaînes vides.



##### Tableau associatif:

```bash
$ tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
```



##### Avec declare:

```bash
$ declare -a tableau_indi
$ declare -A tableau_asso
```

Initialisation:

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )
$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
```

Tableau en lecture seule:

```bash
$ readonly -a tableau_indi_ro=( "un" "deux" "trois" "quatre" )
$ readonly -A tableau_asso_ro=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
```



#### Affichage du tableau:

L’affichage de l’ensemble d’un tableau se fait avec la syntaxe `${montableau[*]}` ou`${montableau[@]}`

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )
$ echo ${tableau_indi[@]}
un deux trois quatre
$ echo ${tableau_indi[2]}
deux


$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
$ echo ${tableau_asso[@]}
gland faine sirop
$ echo ${tableau_asso[erable]}
sirop
```



#### Lecture d'un élément:

```bash
$ tableau_indi=( "un" "deux" "trois" "quatre" )
$ echo ${tableau_indi[2]}
deux
$ echo $tableau_indi
un deux trois quatre	# !!! normalement 'un'


$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
$ echo ${tableau_asso["erable"]}
							# !!!! rien sur zsh !!!!
$ echo ${tableau_asso[erable]}
sirop
```



#### Ajouter un élément:

```bash
ARRAY=()
ARRAY+=('foo')
ARRAY+=('bar')
```



#### Modification d'un élément:

Si le tableau n’existe pas, il sera créé comme un tableau indicé :

```bash
$ tableau_indi[1]="chene"

$ echo ${tableau_indi[1]}
chene
```

Il n’est pas possible de créer un tableau associatif en lui assignant un élément, il faut le déclarer explicitement avant l’assignation



#### Afficher la liste des clés:

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )

$ echo ${!tableau_indi[@]}
zsh: event not found: tableau_indi[@] # !!!

$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )

$ echo ${!tableau_asso[@]}
zsh: event not found: tableau_asso[@] # !!!
```



#### Obtenir la taille d'un tableau:

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )
$ echo ${#tableau_indi[@]}
4

$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
$ echo ${#tableau_asso[@]}
3
```



#### Supprimer un élément:

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )
$ echo ${tableau_indi[@]}
un deux trois quatre

$ unset tableau_indi[1]
zsh: no matches found: tableau_indi[1]

$ echo ${!tableau_indi[@]}
zsh: event not found: tableau_indi[@]

$ echo ${tableau_indi[@]}
un deux trois quatre
```

```bash
$ declare -A tableau_asso=( ['chene']="gland" ['erable']="sirop" ['hetre']="faine" )
$ echo ${tableau_asso[@]}
gland faine sirop

$ unset tableau_asso['erable']
zsh: no matches found: tableau_asso[erable]

$ echo ${!tableau_asso[@]}
zsh: event not found: tableau_asso[@]

$ echo ${tableau_asso[@]}
gland faine sirop

```



#### Supprimer un tableau entier:

```bash
$ declare -a tableau_indi=( "un" "deux" "trois" "quatre" )

$ unset tableau_indi
# unset tableau_indi[@]
# unset tableau_indi[*]

$ echo ${!tableau_indi[@]}
zsh: event not found: tableau_indi[@]
```

