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