Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/08/2017, à 18:28

Hizoka

[Résolu] Rechercher un élément exacte

Bonjour à vous smile

Je me posais une question, comment simplifier ceci :

for x in "${liste[@]}"
do
    [[ ${x} == Exit ]] && return
done

J'ai pensé à :

grep -w "Exit" <<< "${liste[@]}" && return

mais il suffirait qu'il y ait un élément de la liste qui commence par Exit pour que ça plante le truc.

Avez vous une autre idée ?

Merci.

Dernière modification par Hizoka (Le 16/08/2017, à 20:31)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 16/08/2017, à 18:53

pingouinux

Re : [Résolu] Rechercher un élément exacte

Salut Hizoka,
Ça dépend de ce que tu veux faire. La première méthode teste les éléments de la liste un par un, la seconde teste tous les éléments d'un seul coup.

Hors ligne

#3 Le 16/08/2017, à 19:02

Hizoka

Re : [Résolu] Rechercher un élément exacte

Je veux chercher un élément exacte dans la liste.

J'aimerai justement tout tester d'un coup pour eviter toutes ces lignes.

je viens de penser à ça mais pas tip top :

x="${liste[@]/#/\"}" x="${x[@]/%/\"}"
grep -w '"Exit"' <<< "${x[@]}" && return

ou plus simplement

grep -w "Exit:)" <<< "${liste[@]/%/:)}" && return

en toute logique seul un élément dont le texte est Exit devrait s’appeler Exit:) non ?

Dernière modification par Hizoka (Le 16/08/2017, à 19:04)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#4 Le 16/08/2017, à 19:28

pingouinux

Re : [Résolu] Rechercher un élément exacte

Tu peux adapter ta première série de commandes ainsi

x=("${liste[@]/#/\"}")
x=("${x[@]/%/\"}")
grep -w '"Exit"' <<< "${x[@]}" && return

Ta dernière commande va déclencher le test même si Exit est la fin d'un élément de la liste (et non l'élément complet).

Hors ligne

#5 Le 16/08/2017, à 19:33

pingouinux

Re : [Résolu] Rechercher un élément exacte

Ceci devrait convenir

printf "%s\n" "${liste[@]}" | grep '^Exit$' && return

Hors ligne

#6 Le 16/08/2017, à 20:30

Hizoka

Re : [Résolu] Rechercher un élément exacte

Pas mal ! Merci smile


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#7 Le 16/08/2017, à 20:48

pingouinux

Re : [Résolu] Rechercher un élément exacte

Ma suggestion en #5 est pratiquement équivalente à ta première solution en #1.

Hors ligne

#8 Le 16/08/2017, à 22:44

Hizoka

Re : [Résolu] Rechercher un élément exacte

Oui et elle me plait bien, elle est facilement lisible.

On m'a egalement proposé :

searchArray () { ar=( exit fin 'exit ing' fine send ); rgx="^$(IFS='|'; echo "${ar[*]}")$"; [[ $1 =~ $rgx ]] && printf '%s\n' "${BASH_REMATCH}"; }

ou plus simplement :

egrep "^ ?Exit$" <<< "${liste[@]/%/$'\n'}"

qui est bien plus proche de mon idée de base.

Dernière modification par Hizoka (Le 19/08/2017, à 11:27)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne