Pages : 1
#1 Le 08/01/2016, à 12:29
- ar barzh paour
[Résolu] équivalence
encore une autre ....
là j'ai cherché pourquoi mon script ne fonctionnait pas
(évidemment le script réel est plus compliqué que ça)
alors pourquoi
#!/bin/bash # ajouté suite remarque de tiramiseb car c'est bien du bash
deb="2"
modele="?"
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi
retourne NonOK
alors que
#!/bin/bash # ajouté suite remarque de tiramiseb car c'est bien du bash
deb="A2"
modele="A?"
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi
retourne bien OK
Dernière modification par ar barzh paour (Le 09/01/2016, à 04:31)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#2 Le 08/01/2016, à 13:26
- credenhill
Re : [Résolu] équivalence
hello
c'est un . qu'il faut, c'est une expr. reg.
$ head f9
#!/bin/bash
deb="2"
modele="."
if [[ $deb =~ $modele ]]
then
echo $deb OK
else
echo $deb NonOK
fi
$ ./f9
2 OK
Dernière modification par credenhill (Le 08/01/2016, à 13:28)
Hors ligne
#3 Le 08/01/2016, à 14:36
- tiramiseb
Re : [Résolu] équivalence
En effet, "modele" doit être une regex. Renseigne-toi sur les regex...
c'est une expr. reg.
regular expression (en)
expression rationnelle (fr)
pas « expression régulière »
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#4 Le 08/01/2016, à 15:13
- ar barzh paour
Re : [Résolu] équivalence
merci à tous les deux
j'ai confondu les caractères utilisés dans la substitution de nom de fichier
je relis bien
Caractères communs aux ERb et ERe
( remarque : j'ai comme traduction expressions régulières basiques / étendues)
. Un caractère quelconque
hop hop hop
je m'étais basé à tort semble-t-il sur la syntaxe de
${variable#modele} où l'on indique que "modele" peut inclure les caractères * ? etc. de la substitution de fichier .....
et pourtant ce qui suit fonctionne bien donc pas tout à fait la même syntaxe !!!
nom_simple="2014-12-31:12-05-26 animation"
modele="[12][0-9][0-9][0-9]?[0-2][0-9]?[0-3][0-9]?[0-2][0-9]?[0-5][0-9]?[0-5][0-9]*"
deb=${nom_simple:0:19}
echo "début :**${deb}**"
if [[ $deb = $modele ]]
then
echo OK
else
echo Non OK
fi
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#5 Le 08/01/2016, à 15:20
- tiramiseb
Re : [Résolu] équivalence
if [[ $deb = $modele ]]
Il te manque un "~"...
Là tu fais du pattern matching de base, sans regex.
Dernière modification par tiramiseb (Le 08/01/2016, à 15:23)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#6 Le 08/01/2016, à 15:24
- tiramiseb
Re : [Résolu] équivalence
[ajoutons en passant que tout ça c'est de la syntaxe bash hein, pas de la syntaxe shell standard... si quelqu'un lit cette discussion dans 2 ans, que ça soit bien clair pour lui]
Dernière modification par tiramiseb (Le 08/01/2016, à 15:24)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#7 Le 08/01/2016, à 16:00
- credenhill
Re : [Résolu] équivalence
credenhill a écrit :c'est une expr. reg.
regular expression (en)
expression rationnelle (fr)pas « expression régulière »
blablabla
Une expression rationnelle, ou expression régulière (traduction de l'anglais regular expression), est, en informatique,...
https://fr.wikipedia.org/wiki/Expression_rationnelle
Hors ligne
#8 Le 08/01/2016, à 16:06
- tiramiseb
Re : [Résolu] équivalence
C'est un moche anglicisme.
l'expression n'est pas régulière, par contre elle est rationnelle.
Tu dis aussi "supporter" (de l'anglais "to support") au lieu de "soutenir" ?
« oui ma chérie, tous les jours je te supporte ! »
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#9 Le 09/01/2016, à 04:27
- ar barzh paour
Re : [Résolu] équivalence
if [[ $deb = $modele ]]
Il te manque un "~"...
non non c'est bien l'égalité que je voulais utiliser
tu dis "pattern matching" , il faut que je recherche ce que ça veut dire plus précisement
mais ce que je lis dans mon bouquin (programmation shell sous unix/linux)
(concernant [[ chaine = modele ]] [[ chaine !=modele ]] [[ chaine1 <chaine2 ]] [[ chaine1 > chaine2 ]]
c'est
le tableau ci-dessous rappelle les caractères spéciaux utilisables dans les modèles de chaine de caractères
* 0 à n caractères
? 1 caractère quelconque
[abc] 1caractère qparmi ceux cités entre les crochets
[!abc] 1 caractère ne faisant pas partie des caractères citésje n'ai rien concernant =~ , j'ai découvert cette syntaxe dans une discussion sur ce forum ,
on la retrouve bien dans man ou dans le guide bash
ce que je constate
[[ $chaine =~ $modele ]] est basé sur les une expression régulière
et pas [[ $chaine = $modele ]]
je marque résolu
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#10 Le 09/01/2016, à 11:00
- tiramiseb
Re : [Résolu] équivalence
ce que je constate
[[ $chaine =~ $modele ]] est basé sur les une expression régulière
et pas [[ $chaine = $modele ]]
C'est exactement ça, comme le dit la manpage de bash.
Sauf qu'en français on dit « expression rationnelle » et non « expression régulière » (un mauvais anglicisme). cf mon message #8.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
Pages : 1