Re: [#!/fr] Indirect expansion (was: Re: Bug declare array b…

Page principale
Supprimer ce message
Répondre à ce message
Auteur: Patrick Proniewski
Date:  
À: La liste francophone des scripts shell
Sujet: Re: [#!/fr] Indirect expansion (was: Re: Bug declare array bash???)
On 30 juin 07, at 20:30, Daniel Varlet wrote:

>     # Dans bash 3.zzzz
>     # ${!a[@]} devrait être implanté, ce qui éviterait de devenir fou
> avec les subtilités d'eval.
>     # résultat escompté donc:
>
>     $ unset a ref; ref=("a0" "a1" "a2 a3"); a=ref; for z in "${!a
> [@]}"; do echo "$z"; done
>     a0
>     a1
>     a2 a3



nop nop nop, je pense que tu as mal compris le man bash, voilà ce que
cela donne sur un bash 3.2 :

$ unset a ref; ref=("a0" "a1" "a2 a3"); a=ref; for z in "${!a[@]}";
do echo "$z"; done
0

car en fait, ${!a[@]} n'est pas considéré une référence indirecte :

${!name[@]}
${!name[*]}
If name is an array variable, expands to the list
of array
indices (keys) assigned in name. If name is not
an array,
expands to 0 if name is set and null otherwise. When
@ is used
and the expansion appears within double quotes, each
key expands
to a separate word.

si tu as une table, alors le résultat de ${!table[@]}, est la liste
des clés du tableau (0, 1, 2, 3, ...). Dans ton exemple, $a n'est pas
une table mais tu utilises la syntaxe d'une table (a[@]), donc cela
retourne 0, comme indiqué dans le man.


patpro
_______________________________________________
archives :
http://listes.patpro.net/list/sshfr.fr.html
http://listes.patpro.net/mailman/listinfo/script_shell_fr