Il est souvent nécessaire d’utiliser des listes d’éléments dans les programmes. Bien qu’il soit assez aisé de coder leur accès en script shell, le code peut encore être simplifié, en éliminant les parties fastidieuses et répétitives. Ce module ne fournit qu’un petit ensemble de fonctions pour gérer cela, sans définir de nouveau concept.
Comme il vient d’être dit, nlist n’introduit pas de formalisme particulier concernant les listes, mais se base sur le concept existant en shell : une liste est une chaîne d’élément séparé par des white space. On peut donc toujours utiliser et manipuler les listes en dehors des fonctions décrites ici-même, sans aucune interférence.
Attention tout de même, car nlist se base sur les outils Unix standard en plus du langage shell, pour effectuer certaines actions ; mais nlist ne supporte pas (encore) une gestion complète de caractères séparateurs redéfinis. En effet, tous les outils Unix, ainsi que le shell, utilisent la variable d’environnement $IFS pour déterminer la séparation entre deux mots ; cette variable doit contenir au moins le caractère espace pour que nlist fonctionne correctement. Par ailleurs, d’autres caractères inclus dans $IFS pourraient interférer avec les éléments contenus dans la liste. Donc encore une fois, attention :-)
Affiche sur la sortie standard le nombre d’élements dans la liste.
nlist_count <list>
* <list> le contenu d’une variable contenant une liste
# une liste $list est alimentée (voir nlist_add) count=`nlist_count "$list"`
Ajoute (ou initialise) un ou plusieurs éléments à la fin d’une liste.
nlist_add <list> <value> [<value> ..]
# la variable $list n'existe pas encore nlist_add list 'item1' # $list existe désormais et contient 'item1' nlist_add list 'item2' 'item3' 'item4' # $list contient "item1 item2 item3 item4"
Retourne une liste inversée des éléments d’une liste (le premier élément devient le dernier).
nlist_reverse <list>
nlist_add list a b c d list2=`nlist_reverse "$list"` # $list2 contient 'd c b a'
Retourne l’élement suivant dans une liste.
nlist_next <list> <current>
nlist_add list a b c d item_b=`nlist_next "$list" a` item_d=`nlist_next "$list" c` item_vide=`nlist_next "$list" d`
Retourne l’élement précédent dans une liste.
nlist_prev <list> <current>
nlist_add list a b c d item_a=`nlist_prev "$list" b` item_b=`nlist_prev "$list" c` item_vide=`nlist_prev "$list" a`
nlist_loop -l <list> [-f <from>] [-t <to>] [-r] -c <command> [-a <arg>]
cmd () { echo "item: '$1'" } nlist_add list a b c d e # a b c d e nlist_loop -l "$list" -c cmd # e d c b a nlist_loop -l "$list" -r -c cmd # b c d e nlist_loop -l "$list" -f b -c cmd # d c b a nlist_loop -l "$list" -f d -r -c cmd # b c d nlist_loop -l "$list" -f b -t d -c cmd # d c b nlist_loop -l "$list" -r -f d -t b -c cmd