Re: exemple en GNU bash de variable tableau

2024-01-29 Par sujet Étienne Mollier
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 
 : :' :  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


signature.asc
Description: PGP signature


Re: exemple en GNU bash de variable tableau

2024-01-29 Par sujet Basile Starynkevitch



On 1/29/24 16:48, Michel Verdier wrote:

Le 29 janvier 2024 Basile Starynkevitch a écrit :


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).

Pourquoi un tableau ? Une simple liste ne suffit pas ?



Bien sûr que si, pour le script 
https://github.com/RefPerSys/RefPerSys/blob/master/do-configure-refpersys.bash


(le script de configuration du moteur d'inférences libre RefPerSys en 
http://refpersys.org/ )


*Une liste simplement chainée mais _mutable_ conviendrait tout à fait.*


La question plus technique devient: *comment implémente-t-on* (en 
quelques lignes de GNU bash sous Linux) *une telle liste simplement 
chainée*.



Pour rappel: C++ a des listes simplement chainées (pour les détails 
consulter https://en.cppreference.com/w/cpp/container/list ...)


et Ocaml a des listes simplement chainées (pour les détails consulter 
https://v2.ocaml.org/api/List.html )


et Guile ou Scheme a des listes simplement chainées (voir la section 
6.3.2 du R5RS 
)



Un exemple en GNU bash (testable sous Linux) de liste simplement chainée 
me convient.


L'exemple 
https://www.unix.com/shell-programming-and-scripting/271790-implementing-linked-list-shell-scripting.html 
me parait trop long.



Je souhaite un exemple bien plus simple, ou bien la suggestion de passer 
de GNU bash à autre chose (je songe peut-être à Python, que je ne 
connais guère).



Pour les aspects "philosophiques" de RefPerSys n'hésitez pas à consulter 
https://afia.asso.fr/journee-hommage-j-pitrat/



Pour un brouillon de papier en anglais (ou même un brouillon très 
incomplet en français), me contacter par courriel


Librement.

--
Basile Starynkevitch
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/
Seehttps://github.com/RefPerSys/RefPerSys



Re: exemple en GNU bash de variable tableau

2024-01-29 Par sujet Michel Verdier
Le 29 janvier 2024 Basile Starynkevitch a écrit :

> 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).

Pourquoi un tableau ? Une simple liste ne suffit pas ?



Re: exemple en GNU bash de variable tableau

2024-01-29 Par sujet bidons59

Bonjour

Suis certainement à côté de la plaque, mais l'instruction "trap" 
pourrait peut être faire l'affaire?




On 29/01/2024 12:42, didier gaumet wrote:

Bonjour,

Avertissement: j'ai jamais vraiment écrit quoi que ce soit en Bash donc 
ne pas se fier aveuglément à mes paroles


De ce que je comprends, Bash ne gère pas nativement les tableaux 
multi-dimensions (cf la doc Bash):

https://www.gnu.org/software/bash/manual/html_node/Arrays.html

il faut donc contourner cette limitation. Un exemple ici:
https://unix.stackexchange.com/questions/611813/how-to-implement-2d-matrix-using-shell-script





Re: exemple en GNU bash de variable tableau

2024-01-29 Par sujet didier gaumet

Bonjour,

Avertissement: j'ai jamais vraiment écrit quoi que ce soit en Bash donc 
ne pas se fier aveuglément à mes paroles


De ce que je comprends, Bash ne gère pas nativement les tableaux 
multi-dimensions (cf la doc Bash):

https://www.gnu.org/software/bash/manual/html_node/Arrays.html

il faut donc contourner cette limitation. Un exemple ici:
https://unix.stackexchange.com/questions/611813/how-to-implement-2d-matrix-using-shell-script



exemple en GNU bash de variable tableau

2024-01-29 Par sujet Basile Starynkevitch

Bonjour la liste

Dans https://github.com/RefPerSys/RefPerSys (un projet de moteur 
d'inférences sous licence GPLv3+ pour Debian) j'essaie de coder un 
script en bash de configuration (simple).


Voir le commit bfb1314 du fichier do-configure-refpersys.bash

(les commentaires sont en mauvais englais)

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.

Pour info, mon ordinateur est x86-64 sous Debian/Trixie mis à jour ce matin.

Avec GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)

Merci de vos eclairages, ou bien d'un exemple (moins de cent lignes de 
GNU bash) qui utilise une variable tableau en y ajouter (dans une 
itération) des éléments (ici des noms de fichiers à supprimer plus tard)



Librement
--
Basile Starynkevitch 
(only mine opinions / les opinions sont miennes uniquement)
92340 Bourg-la-Reine, France
web page: starynkevitch.net/Basile/
See https://github.com/RefPerSys/RefPerSys