#1 Le 16/08/2017, à 17:28
- Hizoka
[Résolu] Rechercher un élément exacte
Bonjour à vous
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, à 19:31)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 16/08/2017, à 17: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, à 18: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, à 18:04)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 16/08/2017, à 18: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, à 18: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, à 19:30
- Hizoka
Re : [Résolu] Rechercher un élément exacte
Pas mal ! Merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 16/08/2017, à 19: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, à 21: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, à 10:27)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne