Utilisez un autre type de tableau: plutôt qu'un tableau indexé sur des nombres entiers, utilisez un tableau associatif, donc la clé (index) est celle que vous allez rechercher. bash-4.0
ou plus tard est nécessaire pour cela.
declare -A array1=(
[prova1]=1 [prova2]=1 [slack64]=1
)
a=slack64
[[ -n "${array1[$a]}" ]] && printf '%s is in array\n' "$a"
Dans ce qui précède, nous ne nous soucions pas vraiment des valeurs, elles doivent seulement être non vides pour cela. Vous pouvez "inverser" un tableau indexé dans un nouveau tableau associatif en échangeant la clé et la valeur:
declare -a array1=(
prova1 prova2 slack64
)
declare -A map # required: declare explicit associative array
for key in "${!array1[@]}"; do map[${array1[$key]}]="$key"; done # see below
a=slack64
[[ -n "${map[$a]}" ]] && printf '%s is in array\n' "$a"
Cela peut être payant si vous avez de grands tableaux qui sont fréquemment recherchés, car la mise en œuvre de tableaux associatifs fonctionnera mieux que les boucles traversant les tableaux. Cependant, il ne conviendra pas à tous les cas d'utilisation, car il ne peut pas gérer les doublons (bien que vous puissiez utiliser la valeur comme compteur, au lieu de 1 comme ci-dessus), et il ne peut pas gérer un index vide.
Éclatant la ligne complexe ci-dessus, pour expliquer "l'inversion":
for key in "${!a[@]}" # expand the array indexes to a list of words
do
map[${a[$key]}]="$key" # exchange the value ${a[$key]} with the index $key
done
array1
travail?