web-dev-qa-db-fra.com

comment compter la longueur d'un tableau défini en bash?

Je suis nouveau sur bash et je ne trouve pas un bon tutoriel pour répondre à ma question.

array=( item1 item2 item3)
for name in ${array[@]}; do
    echo current/total
    ... some other codes
done

Je veux calculer la valeur "actuelle" et "totale", comme la sortie attendue de ceci étant:

1/3
2/3
3/3

Merci pour tout type de conseils

66
AGamePlayer

Vous pouvez accéder aux indices de tableau en utilisant ${!array[@]} Et à la longueur du tableau en utilisant ${#array[@]}, Par ex. :

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $index/${#array[@]}
done

Notez que puisque les tableaux bash sont indexés zéro, vous obtiendrez en fait:

0/3
1/3
2/3

Si vous voulez que le compte s'exécute à partir de 1, vous pouvez remplacer $index Par $((index+1)). Si vous voulez les valeurs ainsi que les indices vous pouvez utiliser "${array[index]}" I.e.

#!/bin/bash

array=( item1 item2 item3 )
for index in ${!array[@]}; do
    echo $((index+1))/${#array[@]} = "${array[index]}"
done

donnant

1/3 = item1
2/3 = item2
3/3 = item3
113
steeldriver

Un index zéro est parfaitement valide si vous pensez que l'index est en fait un offset de l'adresse de base d'un tableau. C'est la norme en fait, bien que cela varie d'un dialecte à l'autre. Avec l'ancienne langue joviale, [0] contenait en fait la taille maximale du tableau. donc ça a commencé par [1].

Avec certaines implémentations de base, vous pouvez choisir arbitrairement d'avoir 0 ou 1 comme premier index. Et au moins un Basic vous permet de désigner des tableaux pour indexer fron [n] à [m]. où n et m peuvent avoir n'importe quelle valeur entière, même négative, tant que n est inférieur ou égal à m. La valeur n them devient soustraite de [index] entré, comme index-n = 0 si l'index correspond à n.

Mais vous pouvez faire la même chose et plus dans votre propre code. Vous pouvez même inverser l'ordre d'un tableau de cette façon:

dim array(0, abs(m-n)); 
step=sign(m-n); 
if n > m then 
    base=m 
else 
    base=n; 
fi

Cet exemple de code n'est en fait que partiellement d'une langue. Je voulais juste que ce soit plus lisible. La variable de pas est utilisée pour contrôler la direction apparente dans laquelle vous vous déplacez, qu'elle soit positive ou négative, et est utilisée pour calculer l'indice effectif lors de l'entrée ou de la sortie du tableau, qui est en fait toujours positif à partir de [0].

1
Donald Darden