#1 Le 22/04/2017, à 10:51
- Arbiel
[Résolu] Passer un tableau en paramètres à une fonction
Bonjour
Je ne réussis pas à passer un tableau associatif en paramètre à une fonction
function y { declare -A table="${1}" ; echo "${table[*]}" ; }
declare -A tab
tab[alpha]="a"
tab[beta]="b"
y "${tab}"
me donne
remi@remi-Vostro-3550:~$ y "${tab}"
remi@remi-Vostro-3550:~$
Pour un tableau indexé, j'y suis arrivé en passant en paramètre
"($(echo ${tab[@]}))"
function y { declare -a table="${1}" ; echo "${table[*]}" ; }
declare -a tab
tab=(a b c d)
ce qui me donne
y "($(echo ${tab[@]}))"
a b c d
remi@remi-Vostro-3550:~$
N'y a-t-il pas plus simple ?
Arbiel
Dernière modification par Arbiel (Le 24/04/2017, à 19:28)
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#2 Le 22/04/2017, à 10:59
- Watael
Re : [Résolu] Passer un tableau en paramètres à une fonction
salut,
avec un nameref :
$ declare -A assocArray=( ["bla"]="bla bla" ["tra la"]="tra la la" )
$ maFonc() { declare -n tableauAsso=$1; for i in "${!tableauAsso[@]}"; do echo "tableauAsso[$i] = ${tableauAsso["$i"]}"; done;}
$ maFonc assocArray
tableauAsso[tra la] = tra la la
tableauAsso[bla] = bla bla
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 22/04/2017, à 11:32
- Arbiel
Re : [Résolu] Passer un tableau en paramètres à une fonction
Je te remercie.
Le manuel bash que j'avais téléchargé ne mentionne pas l'option -n.
Mais, celui que je viens de consulter l'indique clairement.
-n
Give each name the nameref attribute, making it a name reference to another variable. That other variable is defined by the value of name. All references, assignments, and attribute modifications to name, except for those using or changing the -n attribute itself, are performed on the variable referenced by name’s value. The nameref attribute cannot be applied to array variables.
ce qui ne veut pas dire que la variable référencée ne peut pas être un tableau, ce que j'ai compris dans ma première lecture, un peu trop rapide.
Merci encore.
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne
#4 Le 24/04/2017, à 18:25
- Arbiel
Re : [Résolu] Passer un tableau en paramètres à une fonction
Bonjour
L'option nameref permet aussi de remplir le tableau dans la fonction. Les tableaux peuvent eux-mêmes être déclarés dans une fonction de plus haut rang, avec du code tel que ceci
function remplir_tableaux () {
declare -n loc_tn=${1};
declare -n loc_tv=${2};
remplissage des tableaux nommés loc_tn et loc_tv
}
function exploitation_tableaux () {
declare -A tn;
declare -a tv;
préparation appel remplir_tableaux
remplir_tableaux tn tv autres_paramètres
exploitation des tableaux
}
exploitation_tableaux
}
Arbiel
Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04, GNOME 3.36.8
24.04 en cours de tests
Abandon d'azerty au profit de bépo, de google au profit de Lilo et de la messagerie électronique violable au profit de Protonmail, une messagerie chiffrée de poste de travail à poste de travail.
Hors ligne