web-dev-qa-db-fra.com

Linux Shell prend-il en charge la structure des données de liste?

cette question n'est pas la même chose que Est-ce que Shell prend en charge les ensembles?

je connais beaucoup de structures de liste de support de langage de script, telles que python, python, Ruby et javascript. Qu'en est-il du shell linux?

shell prend-il en charge une telle syntaxe?

for i in list:
do
     print i
done

je voudrais d’abord initialiser une liste , par exemple:

ListName = [ item1, item2, ..., itemn ]

puis parcourez-le

est-ce possible lors de la programmation de scripts shell?

45
hugemeow

Il supporte les listes, mais pas en tant que structure de données séparée (en ignorant les tableaux pour le moment).

La boucle for parcourt une liste (au sens générique) de valeurs séparées par des espaces, quelle que soit la manière dont cette liste est créée, que ce soit littéralement:

for i in 1 2 3; do
    echo "$i"
done

ou par expansion de paramètre:

listVar="1 2 3"
for i in $listVar; do
    echo "$i"
done

ou substitution de commande:

for i in $(echo 1; echo 2; echo 3); do
    echo "$i"
done

Un tableau est juste un paramètre spécial qui peut contenir une liste de valeurs plus structurée, chaque élément pouvant lui-même contenir des espaces. Comparez la différence:

array=("item 1" "item 2" "item 3")
for i in "${array[@]}"; do   # The quotes are necessary here
    echo "$i"
done

list='"item 1" "item 2" "item 3"'
for i in $list; do
    echo $i
done
for i in "$list"; do
    echo $i
done
for i in ${array[@]}; do
    echo $i
done
75
chepner

Pour faire une liste, il suffit de le faire

colors=(red orange white "light gray")

Techniquement, c'est un tableau, mais - bien sûr - il a toutes les fonctionnalités de la liste.
Even python list sont implémentés avec array

11
DonCallisto