Pages : 1
#1 Le 27/07/2016, à 17:03
- lynn
Tableau en bash
Bonjour,
VAR=02
LIST=(00 01 02 03 04 05)
[[ "$var" = "${LIST[@]}" ]] && echo "$var fait partie de la liste";
Je traduis la dernière ligne comme ça: Si la variable "var" est égale à un des éléments contenus dans le tableau "LIST", alors on affiche "02 fait partie de la liste" et si aucun élément ne correspond, alors on affiche rien...
Ma traduction n'a pas l'air d'être la bonne puisque ça n'affiche rien...
Quelqu'un peut-il me donner un début d'explication? Merci.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2 Le 27/07/2016, à 17:18
- pingouinux
Re : Tableau en bash
Bonjour,
for elem in "${LIST[@]}"
do
[[ $var = $elem ]] && { echo "$var fait partie de la liste"; break; }
done
Et aussi, var est différent de VAR.
Hors ligne
#3 Le 27/07/2016, à 17:46
- lynn
Re : Tableau en bash
Ah ok, il faut faire une boucle sur les éléments du tableau et ensuite comparer les valeurs...
Pour var et VAR, c'est une erreur de copie de ma part...
Merci pingouinux.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#4 Le 27/07/2016, à 17:53
- Hizoka
Re : Tableau en bash
ou ça aussi (pingouinux dira si je me suis planté )
VAR=02
LIST=(00 01 02 03 04 05)
[[ $(grep -w "${VAR}" <<< "${LIST[@]}") ]] && echo "${VAR} fait partie de la liste"
# 02 fait partie de la liste
VAR=09
LIST=(00 01 02 03 04 05)
[[ $(grep -w "${VAR}" <<< "${LIST[@]}") ]] && echo "${VAR} fait partie de la liste"
Dernière modification par Hizoka (Le 27/07/2016, à 17:54)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 27/07/2016, à 17:59
- Watael
Re : Tableau en bash
salut,
$ VAR=02
$ LIST=(00 01 02 03 04 05)
$ (IFS='|'; reg="^(${LIST[*]})$"; [[ $VAR =~ $reg ]] && echo OK || echo ko)
OK
$
$ LIST=(00 01 2 03 04 05)
$ (IFS='|'; reg="^(${LIST[*]})$"; [[ $VAR =~ $reg ]] && echo OK || echo ko)
ko
$
$ LIST=(00 01 03 04 05)
$ (IFS='|'; reg="^(${LIST[*]})$"; [[ $VAR =~ $reg ]] && echo OK || echo ko)
ko
$
les commandes sont exécutées dans un sous-shell pour ne pas "polluer" l'IFS de l'environnement courant.
Dernière modification par Watael (Le 27/07/2016, à 18:00)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#6 Le 27/07/2016, à 18:12
- pingouinux
Re : Tableau en bash
@Hizoka #4 : Ça marche aussi mais tu peux simplifier
grep -qw "${VAR}" <<< "${LIST[@]}" && echo "${VAR} fait partie de la liste"
Hors ligne
#7 Le 27/07/2016, à 18:17
- lynn
Re : Tableau en bash
Bon, bah y' a vraiment moyen de faire quelque chose. Merci à vous tous pour vos suggestions.
@Watel
Pour mon inculture personnelle, si tu pouvais détailler un peu cette partie
reg="^(${LIST[*]})$"
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#8 Le 27/07/2016, à 18:28
- lynn
Re : Tableau en bash
Comme je suis dans les tableaux, j'ai une question subsidiaire sur la façon de former la liste des éléments.
Est-il possible que LIST prenne cette forme LIST=(01 à 12) plutôt que cette forme LIST=(01 02 03 04 05 06 07 08 09 10 11 12) et si oui, quelle est la syntaxe à utiliser?
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#9 Le 27/07/2016, à 18:31
- pingouinux
Re : Tableau en bash
LIST=( {01..12} )
Hors ligne
#10 Le 27/07/2016, à 18:33
- k3c
Re : Tableau en bash
si tu fais
man seq
tu as au début
SEQ(1) User Commands SEQ(1)
NAME
seq - print a sequence of numbers
SYNOPSIS
seq [OPTION]... LAST
seq [OPTION]... FIRST LAST
seq [OPTION]... FIRST INCREMENT LAST
DESCRIPTION
Print numbers from FIRST to LAST, in steps of INCREMENT.
Mandatory arguments to long options are mandatory for short options too.
Debian 12 sur Thinkpad reconditionné
Hors ligne
#11 Le 27/07/2016, à 19:20
- Watael
Re : Tableau en bash
reg="^(${LIST[*]})$"
cette "commande" construit une regex qui sera ensuite utilisée dans le test amélioré [[ avec l'opérateur de regex (!) =~
il est préférable de toujours mettre les regex, qui seront utilisées dans le test amélioré, dans une variable : ça évite entre autre les problème d'interprétation des guillemets.
exécute le sous-shell en ajoutant
set -x
au début,
et
set +x
à la fin.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 27/07/2016, à 19:40
- lynn
Re : Tableau en bash
Merci à tous pour toutes vos précisions...
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
Pages : 1