wiki zsh tableaux : erreur !

Marc Chantreux marc.chantreux at ulpmm.u-strasbg.fr
Fri Sep 8 09:09:30 CEST 2006


Salut, 

Lu sur la page tableau de zsh: 

% lists=(global www asyd guest)
% lists[(r)global]=''
% echo $lists
www asyd guest

c'est une erreur ! l'élément est vide mais pas supprimé !

explications : 

on crée le tableau et on affiche. 

% a=( un test bete )
% index=0; for el ( $a ) { print $(( ++index )) $el }
1 un
2 test
3 bete

j'affecte une chaine vide a a[2]
j'affiche


% a[2]=''
% index=0; for el ( $a ) { print $(( ++index )) $el }
1 un
2 bete

on peut croire que $a n'a plus que 2 elements, ce qui est faux :

% index=0; for el ( "$a[@]" ) { print $(( ++index )) $el }
1 un
2
3 bete

en fait, c'est le contexte d'expansion de a qui change, ce que la
boucle for recupere est une expansion de $a et non $a lui-même.

dans le guide zsh, chapitre 15.2.2 (  Array Element Assignment ), on
peur lire :

To delete an element of an ordinary array, assign `()' to that element.
To delete an element of an associative array, use the unset command:

     unset "NAME[EXP]"

donc : 

% a[2]=()
% index=0; for el ( "$a[@]" ) { print $(( ++index )) $el }
1 un
2 bete



conclusion : qui corrige ? 

marc





-- 
téléphone : 03.90.24.00.19
courriel  : marc.chantreux at ulpmm.u-strasbg.fr
---------------------------------------


More information about the Shell mailing list