======Les tableaux en ZSH======
=====Déclaration d'un tableau=====
% array=(1 2 3)
% echo $array[2]
2
Attention, les indices 0 et 1 correspondent tous les deux au premier élément du tableau !
=====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
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).