Je suis venu sur cette fonction cool Bash pour vérifier si un tableau contient un élément:
if CONTAINS_ELEMENT $element "${array[@]}"; then ... fi
4 Réponses :
Cela devrait le faire: session de test: p> bien sûr, il y a des moyens plus rapides de le faire si les tableaux sont triés ou aucun des éléments de matrice contient des espaces blancheurs. P> p>
Comment prendriez-vous deux tableaux comme paramètres? Ce n'est pas possible.
Vous pouvez prendre la taille de la première matrice comme premier paramètre :-)
"En outre, si les deux premiers éléments des tableaux respectifs sont différents, il retourne 0." Que veux-tu dire? Je viens de le tester, et ça marche bien.
Pouvez-vous s'il vous plaît supprimer le commentaire dans ce cas? C'est juste du bruit maintenant: /
J'ai enlevé le commentaire, mais une moitié était vraie: la fonction ne prend pas de paramètres.
@CHOROBA: IMHO IN BASH code> Il est correct d'utiliser des paramètres implicites.
@Truey: Je n'ai pas dit que ce n'est pas correct. C'est juste un comportement différent par rapport à la fonction d'origine.
@choroba: exactement la même chose ne peut être mise en œuvre. Une certaine astuce doit être ajoutée comme bash code> ne peut pas passer deux tableaux distincts sur une fonction.
corrigé # 3 fort> Essayez le code ci-dessous. sortie: p> Autre moyen pourrait être de définir un caractère de séparation et de concaténer le premier hachage. Ensuite, recherchez la correspondance de la chaîne sortie: p> Arrcontains Code> Prenez deux arguments, le nom des deux tableaux. Il crée un hachage temporaire de
larrr1 code>, puis vérifiez si des éléments de
larr2 code> sont dans le hachage. De cette façon, le
pour code> -Loops peut être évité. P>
SEPITEMSEP code>. P>
@ L0B0: Vous avez raison! La première fonction la manipulait mal. J'ai corrigé. Merci!
@ L0B0: Je voulais juste uplifier votre dernier commentaire, mais il a été supprimé ...;) De toute façon, merci pour eux!
Cela échoue quand je l'essaie. Il ne renvoie rien, peu importe quoi.
@ Dan-Simonmyrland: Désolé, j'ai réagi de ma dernière correction! Les mauvaises citations simples ont été supprimées. Corrigée! Merci!
Juste FYI: Les tableaux associatifs sont Soutenu par Bash 4.0-Alpha et Newer .
@ L0B0: Yepp. Si vous avez plus ancien, essayez arrcontatsre code> version ... il est sans hashless. :)
Sauf arrcontatsre code> ne fonctionnera pas si votre séparateur est dans la chaîne. Je préfère les solutions qui fonctionnent, peu importe l'entrée.
@ L0B0: Certains caractères non imprimés peuvent être utilisés comme séparateur.
@Truey et votre entrée pourraient toujours contenir ce personnage. Le point est qu'il n'ya absolument aucun caractère (ou séquence de caractères) que vous puissiez utiliser comme séparateur qui ne peut pas également faire partie de l'entrée.
Tard pour la fête, mais je pense que les refues de noms peuvent être utilisés dans Bash 4.3+ pour rendre l'accès au tableau. Ici, on déclarerait Larrr1 comme ceci: déclarer -n larrr1 = "1 $ 1" code>, en supprimant la nécessité du méchant (et potentiellement dangereux)
eval code>.
regarder les liens ci-dessus, je suis venu sur une solution qui fait presque ce que j'en ai besoin pour faire, mais pas tout à fait: maintenant ce code fonctionne lors du passage du paramètre "H", Mais pas lorsque vous passez les autres paramètres de la matrice (-H - help aide). Désolé si je fais une erreur stupide ici, je suis un peu Nuub quand il s'agit de bish script :) p> p>
Un problème de syntaxe: pr1 = "$ paramètre [@]}" code> peut être
pr1 = "$ {paramètres [@]}" code>. Mais je peux suggérer d'utiliser
local pr1 = ... code>. Et un problème de sémantique: le
si code> retournera dans la première boucle dans les paramètres
code>. Je suppose que la partie
sinon code> n'est pas nécessaire.
Ok, votre propre solution s'est révélée une meilleure façon de résoudre mon problème. Merci encore pour votre aide!
Pas correcte! Essayez
"$ {@: 2}" code>.
Très similaire aux questions d'intersection Array 1 et .
Pour montrer que la question a été résolue, cochez une des réponses comme "acceptée".