======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).