#!/bin/bash
A=(AA BB CC DD EE)
for i in "${!A[@]}"; do
if [[ "${A[i]}" = "$1" ]]; then
echo "$i"
fi
done
Notez la notation "${!A[@]}"
qui donne la liste des index valides dans le tableau. En général, vous ne pouvez pas passer de 0 à "${#A[@]}" - 1
, car les index ne sont pas nécessairement contigus. Il peut y avoir des écarts dans la plage d'index s'il y a des lacunes dans les affectations d'éléments de tableau ou si certains éléments ont été désactivés.
Le script ci-dessus affichera tous les index du tableau dont le contenu est égal au premier argument de ligne de commande du script.
EDIT:
Dans votre question, vous semblez vouloir le résultat comme un indice de tableau basé sur un. Dans ce cas, vous pouvez juste augmenter le résultat par:
#!/bin/bash
A=(AA BB CC DD EE)
for i in "${!A[@]}"; do
if [[ "${A[i]}" = "$1" ]]; then
let i++;
echo "$i"
fi
done
Gardez à l'esprit, cependant, que cet indice devra être décrémenté avant d'être utilisé avec un tableau de base zéro.
Ceci est cassé à deux égards: 1. il a une erreur par un, puisque les tableaux de bash sont basés sur zéro - bien que l'OP souhaite également un index basé sur un seul. 2. il suppose que les index de tableau sont contigus, alors qu'ils ne le sont pas - il se cassera complètement s'il y a des lacunes dans les affectations d'index de tableau ou si certains éléments ont été mis à 0 ... – thkala
Oh, ça va aussi casser si n'importe quel tableau les éléments contiennent les nouvelles lignes ... – thkala
Vraie, vraie et vraie: Aoutch! Je vais essayer de me rappeler que les tableaux de bash sont vraiment des cartes. Mais comme l'affiche semble aimer la réponse, je ne vais pas la supprimer, mais je vais la mettre à jour pour souligner les limites que vous avez trouvées. – jfg956