Les tableaux en ZSH

Déclaration d'un tableau

% array=(1 2 3)
% echo $array[2] 
2

<note important> Attention, les indices 0 et 1 correspondent tous les deux au premier élément du tableau ! </note>

Diviser une chaîne de caractères en un tableau de mots

% string="Welcome to the real world, Neo"
% words=(${=string})
% echo $words[6]
Neo

Diviser une chaîne de caractères en un tableau de mots en indiquant le séparateur

% mypath="/var/log/messages"
% myfiles=(${(s:/:)mypath})
% echo $myfiles[2]
log

Créer un tableau de lignes à partir d'un fichier

% buffer=("${(f)$(< /etc/hosts)}")
echo $buffer[1]
127.0.0.1       eva-O1.linagora.com     eva-01

Accéder à plusieurs éléments d'un tableau

% echo $words[1,5]
Welcome to the real world,
% echo ${words[1,5]//,/ }
Welcome to the real world

Taille d'un tableau

% echo ${#words}
6

Vérifier la présence d'un élément

% words=(Welcome to the real world, Neo)
% [[ -n ${(M)words:#to} ]] && echo 1
1
% [[ -n ${(M)words#new} ]] || echo 0
0

on peut aussi utiliser l'équivalent builtin de test que zsh implémente pour être compatible avec les vieux sh. C'est un poil plus court mais le guide zsh demande de préférer [[.

% words=(Welcome to the real world, Neo)
% [ ${(M)words:#to} ] && echo 1
1
% [ ${(M)words#new} ] || echo 0
0

Suppression d'un élément d'un tableau

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

<note warning> Attention, l'utilisation de la syntaxe

lists[(r)global]=''

pour supprimer un élément n'est pas correcte. En effet, elle définie l'élément à vide, plutôt que le détruire. L'utilisation de cette notation peut donc provoquer des bugs difficiles à cibler.

% lists=(a b c)
% lists[(r)b]=''
% echo $lists
a c
% echo ${#lists}
3

Pour plus d'information, consultez la section 14 de la documentation (http://zsh.dotsrc.org/Doc/Release/zsh_14.html#SEC72). </note>

 
shell/zsh/grammaire/tableaux.txt · Dernière modification: 2006/10/26 11:58 (modification externe)