[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: exemple en GNU bash de variable tableau



Bonsoir Basile,

Basile Starynkevitch, on 2024-01-29:
> J'essaie de collecter dans une variable tableau de bash  files_to_remove les
> fichiers temporaires (qu'il faudrait suprimer à la fin de cez script).
> 
> Je n'arrive pas à comprendre la syntaxe des variables tableau en GNU bash.

Comme le veut l'adage, un exemple clair vaut mieux que des
mégaoctets de documentation.  Pour initialiser les entrées d'un
tableau, on peut faire comme ceci :

	$ TAB[0]='zero'
	$ TAB[1]='un'
	$ TAB[2]='deux'

Et pour accéder aux valeurs, il faut impérativement entourer la
variable avec l'index d'accolades, comme suit :

	$ echo "${TAB[0]}"
	zero
	$ echo "${TAB[1]}"
	un
	$ echo "${TAB[2]}"
	deux

Il y a deux méthodes bien distinctes pour accéder à tous les
éléments d'un coup, via l'astérisque ou l'arobaze, illustrées
par l'exemple ci-dessous :

	$ for elem in "${TAB[*]}"; do echo "  * $elem"; done
	  * zero un deux
	$ for elem in "${TAB[@]}"; do echo "  * $elem"; done
	  * zero
	  * un
	  * deux

À noter que dans ce genre de situations, il devient essentiel
d'être clair sur l'usage systématique des double quotes.

Une construction courante pour accéder aux éléments à partir de
l'index, comme celà arrive fréquemment en langages compilés
impératifs, peut ressembler à ça :

	$ for i in $(seq 0 2) ; do echo " $i. ${TAB[$i]}"; done
	 0. zero
	 1. un
	 2. deux

Il est aussi possible de construire et de concaténer des
tableaux avec l'opérateur "parenthèse", par exemple :

	$ TAB=( "${TAB[@]}" "trois" "quatre" )
	$ for elem in "${TAB[@]}"; do echo "  * $elem"; done
	  * zero
	  * un
	  * deux
	  * trois
	  * quatre

Là encore, l'usage de l'arobase et des double quotes est
essentiel pour que la concaténation se passe comme attendu :

	$ TAB_SUITE=( "le cinquieme" "le sixieme" )
	$ TAB_INATTENDU=( "${TAB[*]}" ${TAB_SUITE[@]} )
	$ for elem in "${TAB_INATTENDU[@]}" ; do echo "  * $elem" ; done
	  * zero un deux trois quatre
	  * le
	  * cinquieme
	  * le
	  * sixieme
	$ TAB_ATTENDU=( "${TAB[@]}" "${TAB_SUITE[@]}" )
	$ for elem in "${TAB_ATTENDU[@]}" ; do echo "  * $elem" ; done
	  * zero
	  * un
	  * deux
	  * trois
	  * quatre
	  * le cinquieme
	  * le sixieme

La documentation de référence sur les tableaux du bash se trouve
dans le manuel de bash(1) au chapitre "Array", qui peut être
retrouvé en effectuant une recherche de l'expression rationnelle
"^ Arrays".

Bonne soirée,  :)
-- 
  .''`.  Étienne Mollier <emollier@debian.org>
 : :' :  pgp: 8f91 b227 c7d6 f2b1 948c  8236 793c f67e 8f0d 11da
 `. `'   sent from /dev/pts/5, please excuse my verbosity
   `-    on air: Life Line Project - Unica

Attachment: signature.asc
Description: PGP signature


Reply to: