Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/04/2017, à 11: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, à 20:28)


Arbiel Perlacremaz
LDLC Aurore NK3S-8-S4 Ubuntu 20.04
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, à 11: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.

Hors ligne

#3 Le 22/04/2017, à 12: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.

https://www.gnu.org/software/bash/manual/bashref.html#Bash-Builtins a écrit :

-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
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, à 19: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
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