#! /bin/bash
# array-append.bash

# Copyright (c) Michael S. Zick, 2003, All rights reserved.
# License: Unrestricted reuse in any form, for any purpose.
# Version: $ID$
#
# Légèrement modifié au niveau formatage par M.C.


# Les opérations sur les tableaux sont spécifiques à Bash.
# Le /bin/sh de l'UNIX standard n'a pas d'équivalent.


#  Envoyer la sortie de ce script à 'more'
#+ de façon à ce que le terminal affiche page par page.


# Sous-script imbriqué.
declare -a tableau1=( zero1 un1 deux1 )
# Sous-script léger ([1] n'est pas défini).
declare -a tableau2=( [0]=zero2 [2]=deux2 [3]=trois3 )

echo
echo '- Confirmez que ce tableau est vraiment un sous-script. -'
echo "Nombre d'éléments : 4"        # Codé en dur pour illustration.
for (( i = 0 ; i &lt; 4 ; i++ ))
do
    echo "Élément [$i] : ${tableau2[$i]}"
done
# Voir aussi l'exemple de code plus général dans basics-reviewed.bash.


declare -a dest

# Combinez (ajoutez) deux tableaux dans un troisième.
echo
echo 'Conditions : Sans guillemets, IFS par défaut, opérateur tous-éléments-de'
echo '- Éléments indéfinis non présents, sous-scripts non maintenus. -'
# # Les éléments indéfinis n'existent pas ; ils ne sont pas réellement supprimés.

dest=( ${tableau1[@]} ${tableau2[@]} )
# dest=${tableau1[@]}${tableau2[@]} # Résultats étranges, probablement un bogue.

# Maintenant, affiche le résultat.
echo
echo "- - Test de l'ajout du tableau - -"
cpt=${#dest[@]}

echo "Nombre d'éléments : $cpt"
for (( i = 0 ; i &lt; cpt ; i++ ))
do
    echo "Élément [$i] : ${dest[$i]}"
done

# Affecte un tableau sur un élément d'un tableau simple (deux fois).
dest[0]=${tableau1[@]}
dest[1]=${tableau2[@]}

# Affiche le résultat.
echo
echo '- - Test du tableau modifié - -'
cpt=${#dest[@]}

echo "Nombre d'éléments : $cpt"
for (( i = 0 ; i &lt; cpt ; i++ ))
do
    echo "Élément [$i] : ${dest[$i]}"
done

# Examine le deuxième élément modifié.
echo
echo '- - Réaffecte et affiche le deuxième élément - -'

declare -a sousTableau=${dest[1]}
cpt=${#sousTableau[@]}

echo "Nombre d'éléments: $cpt"
for (( i = 0 ; i &lt; cpt ; i++ ))
do
    echo "Element [$i] : ${sousTableau[$i]}"
done

#  L'affectation d'un tableau entier sur un seul élément d'un autre tableau
#+ utilisant l'opérateur d'affectation de tableau '=${ ... }' a converti le
#+ tableau en cours d'affectation en une chaîne de caractères, les éléments
#+ étant séparés par une espace (le premier caractère de IFS).

# Si les éléments originaux ne contenaient pas d'espace blanc ...
# Si la tableau original n'est pas un sous-script ...
# Alors nous pouvons récupérer la structure du tableau original.

# Restaurer à partir du second élément modifié.
echo
echo "- - Affichage de l'élément restauré - -"

declare -a sousTableau=( ${dest[1]} )
cpt=${#sousTableau[@]}

echo "Nombre d'éléments : $cpt"
for (( i = 0 ; i &lt; cpt ; i++ ))
do
    echo "Élément [$i] : ${sousTableau[$i]}"
done
echo '- - Ne dépends pas de ce comportement - -'
echo '- - Ce comportement est sujet à modification - -'
echo '- - dans les versions de Bash ultérieures à la version 2.05b - -'

# MSZ : Désolé pour la confusion précédente.

exit 0
