Aide pour un script simple
#!/bin/bash
array1=(
prova1
prova2
slack64
)
a="slack64"
b="ab"
if [ $a = $b ]
then
echo "$a = $b : a is equal to b"
else
echo "$a = $b: a is not equal to b"
fi
Ce script ne fonctionne tout simplement pas, je veux un script qui vérifie si slack64 est présent dans une liste (j'utilise un tableau), et me donne simplement, oui est présent ou non. Je ne sais pas comment comparer un tableau avec une seule variable.
array1
travail?Réponses:
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.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:
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":
la source
La manière la plus simple est d'itérer avec une boucle:
la source
[[ a == aaa ]]
est faux mais un match aaa non?[ ]
: classe de caractères (globes)[[ ]]
pour ce que vous avez dit. Avez-vous testé?Avec
zsh
:la source
Cette fonction fonctionne avec des tableaux associatifs.
Nous pouvons utiliser cette fonction pour effectuer l'une des opérations suivantes:
- vérifier si le tableau a une certaine clé -----------------> inArray "myKey" $ {! myArray [@]} "
- vérifier si le tableau contient une certaine valeur ---------> inArray "myValue" "$ {myArray [@]}"
la source
Vous pouvez également utiliser grep pour cela:
la source
$a
, et ne commencent pas-
que vous avez oublié le--
). Vous pouvez utiliser%s\0
au lieu de%s\n
et utilisergrep --null
(en supposant GNU grep ou compatible) car les variables bash ne peuvent pas contenir le caractère NUL de toute façon. Vous devez également gérer le cas d'un tableau vide spécialement (car cette commande printf imprimerait la même chose que pour un tableau avec un élément vide). Notez également que vous n'avez pas besoin de démarrer un sous-shell ici.