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.

#26 Le 10/04/2026, à 23:21

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

[ ] est un alias pour test
[[ ]] est un autre test doté de fonctionnalités avancées
selon l'opérateur de comparaison, il permet (succinctement)
=~ de comparer une chaîne à une regex
== d'utiliser le développement des chemins

je préconise d'utiliser test ou son alias pour les tests simples, et de réserver les crochets doubles pour les tests avancés uniquement.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#27 Le 10/04/2026, à 23:34

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

il faudrait vraiment avoir des exemples et des bons exemples , pas des exemples microsoft mais "pour les nuls"
quand on fait un man test , c'est à prendre peur !!!!!

Hors ligne

#28 Le 10/04/2026, à 23:44

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

on ne fait pas man test, ça n'affiche que la version POSIX.
fais help test ou lis le man bash.
ou encore, suis nos discussions, regarde les solutions qu'on propose.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#29 Le 10/04/2026, à 23:59

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

test string1 = string2
équivaut à   [  string1 = string2 ]

Hors ligne

#30 Le 11/04/2026, à 00:03

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

ouaip.
mais, pense à mettre des guillemets. TOUJOURS ! wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#31 Le 13/04/2026, à 10:53

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour

Un exemple avec awk qui possède une fonction index correspondant à ton problème :

~$ mon_champ="ABCDEFGHIJKLMNOPQRSTUVWWXYZ"

~$ echo "$mon_champ" | awk '{print index($0,"MNOP")}'
13

~$

Mais tu recherches probablement expr index :

~$ expr index "$mon_champ" "MNOP"
13

~$

Avec

jean-marie@jean-marie:~$ mon_champ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
jean-marie@jean-marie:~$ recherche="MNOP"
jean-marie@jean-marie:~$ debut="${mon_champ%%${recherche}*}"
jean-marie@jean-marie:~$ position=$((${#debut}+1))
jean-marie@jean-marie:~$ echo $position
13

on arrive à obtenir la position dans une variable
Avec les 2 réponses de Nany qui marchent très bien, merci encore, je n'arrive pas à les stocker dans une variable
c'est une question de dollar et non de feeling (cf William Scheller!!), de parenthèses de crochets de guillemets ...

J'ai essayé ça , c'est naturellement tout refusé

jojo@jojo-Aspire-7720Z:~$ pos=expr index $var "e"
jojo@jojo-Aspire-7720Z:~$ pos="expr index $var "e""
jojo@jojo-Aspire-7720Z:~$ pos=(expr index $var) "e"
jojo@jojo-Aspire-7720Z:~$ pos=(expr index $var "e")
jojo@jojo-Aspire-7720Z:~$ pos=${expr index $var "e"}
jojo@jojo-Aspire-7720Z:~$ pos=((expr index $var "e"))
jojo@jojo-Aspire-7720Z:~$ pos=echo "$var" | awk '{print index ($0,"cd")}'
jojo@jojo-Aspire-7720Z:~$ pos="echo "$var" | awk '{print index ($0,"cd")}'"

désolé pour la question ,ça doit être une formalité pour vous , experts!!
Merci d'avance pour votre mansuétude
JM

Hors ligne

#32 Le 13/04/2026, à 11:04

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

J'ai essayé ça

tout ça !? je suis sûr que tu peux en trouver d'autres. sad

LIS LA DOC !!!

commence avec le shell programming for beginners
et quand t'auras tout lu, tu pourras passer à l'ABS (Advanced Bash Scripting guide).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#33 Le 13/04/2026, à 11:04

iznobe

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

pos=$(expr index "$mon_champ" "MNOP")

?

Dernière modification par iznobe (Le 13/04/2026, à 11:05)

Hors ligne

#34 Le 13/04/2026, à 13:32

pingouinux

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour,
@nany #3
@iznobe #33

Attention, avec

mon_champ="ABCDEFGHIJKLMNOPQRSTUVWWXYZ"

cette expression

expr index "$mon_champ" "MNOP"

ne renvoie pas la position de la chaîne "MNOP", mais celle du premier caractère M, N, O, P rencontré (ou 0).
Exemple :

$ expr index "$mon_champ" "MAZ"
1

Hors ligne

#35 Le 13/04/2026, à 14:30

iznobe

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

@pingouinux
je ne sais pas , je n' ai pas tester .
j ' ai fait confiance au retour de @nany.

ma réponse était de toute manière plus axée sur la syntaxe appropriée et la demande de :

JM3863 a écrit :

J'ai essayé ça , c'est naturellement tout refusé

jojo@jojo-Aspire-7720Z:~$ pos=expr index $var "e"
jojo@jojo-Aspire-7720Z:~$ pos="expr index $var "e""
jojo@jojo-Aspire-7720Z:~$ pos=(expr index $var) "e"
jojo@jojo-Aspire-7720Z:~$ pos=(expr index $var "e")
jojo@jojo-Aspire-7720Z:~$ pos=${expr index $var "e"}
jojo@jojo-Aspire-7720Z:~$ pos=((expr index $var "e"))
jojo@jojo-Aspire-7720Z:~$ pos=echo "$var" | awk '{print index ($0,"cd")}'
jojo@jojo-Aspire-7720Z:~$ pos="echo "$var" | awk '{print index ($0,"cd")}'"

si je " mâche " completement le boulot , je dirais qu ' en appliquant la syntaxe de mon message précédent , ça donnerait quelquechose comme :

pos=$(expr index "$var" 'e')

Dernière modification par iznobe (Le 13/04/2026, à 14:33)

Hors ligne

#36 Le 13/04/2026, à 14:50

MicP

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Oui :

info expr a écrit :
…
‘index STRING CHARSET’
     Returns the first position in STRING where the first character in
     CHARSET was found.  If no character in CHARSET is found in STRING,
     return 0.
…

=======================
EDIT :

La version française du manuel de la commande expr pourrait prêter à confusion :

man expr
…
       index CHAÎNE CAR
              valeur de la position du premier caractère CAR trouvé dans CHAÎNE, sinon 0
…

et dans la version non traduite :

LANG=C man expr
…
       index STRING CHARS
              index in STRING where any CHARS is found, or 0
…

=======
Se méfier des traductions, chercher la source.

Ambrose Bierce a écrit :

INTERPRETER, n. One who enables two persons of different languages to understand each other by repeating to each what it would have been to the interpreter's advantage for the other to have said.

Traduction :
Interprete : Une personne qui permet à deux personnes parlant des langues différentes de se comprendre en répétant à chacune ce qu'il aurait été préférable pour l'interprète que l'autre ait dit.

Dernière modification par MicP (Le 16/04/2026, à 11:44)

Hors ligne

#37 Le 13/04/2026, à 15:28

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

ouch, le vilain faux-ami. hmm


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#38 Le 14/04/2026, à 07:23

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour à tous et merci
j'ai "travaillé" hier après-midi pour avancer dans ma formation.
je ne suis pas revenu hier voir les réponses à mes questions qui ont déclenché bien des réactions
Je me suis appuyé sur

jean-marie@jean-marie:~$ mon_champ="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
jean-marie@jean-marie:~$ recherche="MNOP"
jean-marie@jean-marie:~$ debut="${mon_champ%%${recherche}*}"
jean-marie@jean-marie:~$ position=$((${#debut}+1))
jean-marie@jean-marie:~$ echo $position

je voulais lire un fichier, en extraire des donnés non contenues sur un seul enregistrement afin de constituer un fichier contenant ces données sélectionnées  (et en testant la validité des données lues (problème de séquences (le fichier en entrée est constitué de séquences de 3 enregistrements, le premier donnant la date, le deuxième le temps et le troisième à exclure))
en sortie j'ai concaténé la date et le temps en séparant le tout par un point virgule.
Pour les problèmes de séquence j'ai testé le premier caractère qui doit être l,m,j,v,s,d (lundi mardi ...dimanche).
J'avais des problèmes de séquence car certains enregistrements étaient en double, et j'ai aussi piégé en corrigeant lundi en yundi par exemple pour tester dans ce cas

Voici fichier entrée

Startup finished in 7.909s (kernel) + 51.657s (userspace) = 59.566s 
graphical.target reached after 51.621s in userspace
lun. 13 avril 2026 09:55:24 CEST
Startup finished in 9.479s (kernel) + 1min 12.098s (userspace) = 1min 21.577s 
graphical.target reached after 59.077s in userspace
lun. 13 avril 2026 20:50:29 CEST
Startup finished in 8.975s (kernel) + 52.481s (userspace) = 1min 1.456s 
graphical.target reached after 52.450s in userspace

voici fichier en sortie

524 mar. 07 avril 2026 08:38:59 CEST ; (userspace) = 1min 20.114s 
525 mer. 08 avril 2026 08:36:20 CEST ; (userspace) = 1min 17.681s 
526 jeu. 09 avril 2026 08:32:47 CEST ; (userspace) = 1min 15.110s 
527 sam. 11 avril 2026 07:43:42 CEST ; (userspace) = 58.700s 
528 sam. 11 avril 2026 09:36:04 CEST ; (userspace) = 59.566s 
529 lun. 13 avril 2026 09:55:24 CEST ; (userspace) = 1min 21.577s 
530 lun. 13 avril 2026 20:50:29 CEST ; (userspace) = 1min 1.456s 
13/04/2026 à 21h03m13s ; 13/04/2026 à 21h03m15s Nombre Lus:  1590 Nombre Ecrits: 530

Je vais regarder en détail vos réponses, je vais garder un de mes petits enfants ce matin.
J'ai une autre question
Comment tuer la tache du programme sh qui tourne (lancé en cliquant sur le nom du programme)
dans top, je ne la vois pas ou je ne comprends pas !!
merci encore

modération: rajout des balises code manquantes

Dernière modification par xubu1957 (Le 14/04/2026, à 07:34)

Hors ligne

#39 Le 16/04/2026, à 08:54

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour
j'ai testé la commande de iznobe

jojo@jojo-Aspire-7720Z:~$ mon_champ="ABCDEFGHIJKLMNOPQRSTUVWWXYZ"
jojo@jojo-Aspire-7720Z:~$ expr index "$mon_champ" "MNOP"
13
jojo@jojo-Aspire-7720Z:~$ expr index "$mon_champ" "MNPP"
13
jojo@jojo-Aspire-7720Z:~$ pos=$(expr index "$mon_champ" "MNOP")
jojo@jojo-Aspire-7720Z:~$ echo $pos
13
jojo@jojo-Aspire-7720Z:~$ ^C
jojo@jojo-Aspire-7720Z:~$ 

elle est donc exacte
et on voit aussi que

La version française du manuel de la commande expr pourrait prêter à confusion :

man expr

…
       index CHAÎNE CAR
              valeur de la position du premier caractère CAR trouvé dans CHAÎNE, sinon 0
…

il faut bien que toute la chaine de caractères recherchée soit trouvée et non que le premier caractère !!
Bonne journée
JM

Hors ligne

#40 Le 16/04/2026, à 09:06

iznobe

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Heu , si ce que dis le man est vrai , il cherche un CARacter donné en argument dans une chaine .
Si tu donnes plusieurs caracteres au lieu de un , il renvoi " valeur de la position du premier caractère CAR trouvé dans CHAÎNE " .
donc si tu fais :

mon_champ="ABCDEFGHIJKLMNOPQRSTUVWWXYZ"
expr index "$mon_champ" "MNOPA"

tu risques d ' avoir une surprise ... car tu devrais recuperer : 1 .
un caractère c ' est une lettre par exemple. pas plusieurs .

Dernière modification par iznobe (Le 16/04/2026, à 09:10)

Hors ligne

#41 Le 16/04/2026, à 09:10

nany

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour,



JM3863 a écrit :

il faut bien que toute la chaine de caractères recherchée soit trouvée et non que le premier caractère !!

Eh bien non.
Si je remplace, par exemple, Le D par un N dans mon_champ :

~$ mon_champ="ABCNEFGHIJKLMNOPQRSTUVWXYZ"
~$

La lettre N se trouve en position 4 et en position 14.
Alors :

~$ expr index "$mon_champ" "MNOP"
4
~$

C’est bien la première position de N qui est donnée.

Hors ligne

#42 Le 16/04/2026, à 11:59

MicP

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour

La chaîne de caractère assignée comme valeur à la variable mon_champ et la liste des caractères à rechercher ne sont pas très bien choisies pour faire des tests
puisqu'elles contiennent toutes les deux des suites de caractères qui sont ordonnées alphabétiquement.

~$ mon_champ="............. blabla...MNOP"
~$ expr index "$mon_champ" "MNOP"
24
~$ mon_champ="...M...PONM.. blabla...MNOP"
~$ expr index "$mon_champ" "MNOP"
4
~$ mon_champ=".......PONM.. blabla...MNOP"
~$ expr index "$mon_champ" "MNOP"
8

Dernière modification par MicP (Le 16/04/2026, à 12:00)

Hors ligne

#43 Le 16/04/2026, à 12:31

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour
j'ai écrit une sottise ,désolé
on voit bien que expr index donne le rang d'un des caractères du premier caractère  trouvé   dans le champ cible  (le choix des caractères à trouver se trouvant dans le champ final Nany l'a très bien prouvé)
en résumé est-ce que un de  ces caractères (ex "mnop") , se trouve dans mon champ?
La proposition proposée par diesel est celle la mieux appropriée pour ma demande initiale (rechercher une chaine de caractères, dans un champ donné
enfin, si j'ai bien compris !!
Merci
JM

Hors ligne

#44 Le 16/04/2026, à 14:20

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

voila mes tests du jour
pour info j'avais opté pour la deuxième solution dans mon programme car je ne savais pas comment recuperer la valeur de l'expr index que m'a donnée iznobe (pos=$(expr index "$mon_champ" "MNOP"))

jojo@jojo-Aspire-7720Z:~$ mon_champ=J
jojo@jojo-Aspire-7720Z:~$ expr index "$mon_champ" "lmjvsd"
0
jojo@jojo-Aspire-7720Z:~$ mon_champ=j
jojo@jojo-Aspire-7720Z:~$ expr index "$mon_champ" "lmjvsd"
1
jojo@jojo-Aspire-7720Z:~$ jourok="lmjvsd"
jojo@jojo-Aspire-7720Z:~$ debjour=j
jojo@jojo-Aspire-7720Z:~$ debutx="${jourok%%${debjour}*}"
jojo@jojo-Aspire-7720Z:~$ echo $debutx
lm
jojo@jojo-Aspire-7720Z:~$ debjour=J
jojo@jojo-Aspire-7720Z:~$ debutx="${jourok%%${debjour}*}"
jojo@jojo-Aspire-7720Z:~$ echo $debutx
lmjvsd

on voit que la casse est importante j est différent de J
Merci encore

Hors ligne

#45 Le 20/04/2026, à 09:48

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour
je reviens vers Micp
Bonjour

Je propose cette ligne de comandes bash :


Cette ligne de commandes retournera la position de recherche dans mon_champ (et un code d'erreur à zéro => indiquant que tout s'est bien passé)
ou bien retournera un code d'erreur à 1 si recherche n'a pas été trouvé dans mon_champ

[[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))

j'ai testé
mon_champ="ABCDEFGHIJKLM"
si je cherche "A"

jojo@jojo-Aspire-7720Z:~$ recherche="A"
jojo@jojo-Aspire-7720Z:~$ [[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
1
jojo@jojo-Aspire-7720Z:~$ p=$(( ${#BASH_REMATCH[1]}  ))
jojo@jojo-Aspire-7720Z:~$ echo $p
0
jojo@jojo-Aspire-7720Z:~$ recherche="B"
jojo@jojo-Aspire-7720Z:~$ [[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
2
jojo@jojo-Aspire-7720Z:~$ p=$(( ${#BASH_REMATCH[1]}  ))
jojo@jojo-Aspire-7720Z:~$ echo $p
1
jojo@jojo-Aspire-7720Z:~$ recherche="L"
jojo@jojo-Aspire-7720Z:~$ [[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
12
jojo@jojo-Aspire-7720Z:~$ recherche="M"
jojo@jojo-Aspire-7720Z:~$ [[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
13
jojo@jojo-Aspire-7720Z:~$ recherche="N"
jojo@jojo-Aspire-7720Z:~$ [[ $mon_champ =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
jojo@jojo-Aspire-7720Z:~$ p=$(( ${#BASH_REMATCH[1]}  ))
jojo@jojo-Aspire-7720Z:~$ echo $p
0

avec A (présent)  ou  N(absent)  la valeur de $(( ${#BASH_REMATCH[1]}  )) est à zéro

et pour les façons de rechercher (Diesel,Nany,Micp)
je n'arrive pas à rechercher dans un champ les caractères "*" et "+"

jojo@jojo-Aspire-7720Z:~$ mon_champ="+-*/^"
jojo@jojo-Aspire-7720Z:~$ recherche="*"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$  echo $position
1
jojo@jojo-Aspire-7720Z:~$ recherche="-"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$ echo $position
2
jojo@jojo-Aspire-7720Z:~$ recherche="/"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$ echo $position
4
jojo@jojo-Aspire-7720Z:~$ recherche="^"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$ echo $position
5
jojo@jojo-Aspire-7720Z:~$ recherche="+"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$ echo $position
1
jojo@jojo-Aspire-7720Z:~$ recherche="T"
jojo@jojo-Aspire-7720Z:~$ debut="${mon_champ%%${recherche}*}"
jojo@jojo-Aspire-7720Z:~$ position=$((${#debut}+1))
jojo@jojo-Aspire-7720Z:~$ echo $position
6

Merci

modération: rajout des balises code, pour éviter aux aidants de s'esquinter la vue.

Dernière modification par xubu1957 (Le 20/04/2026, à 09:58)

Hors ligne

#46 Le 20/04/2026, à 13:20

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

je n'arrive pas à rechercher dans un champ les caractères "*" et "+"

+ est le premier caractère : il n'y a rien avant.
* doit être protégé.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#47 Le 20/04/2026, à 13:40

JM3863

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Merci
Comment protéger le *
comment traiter la requête de Micp
Quant aux balises code , je n'ai rien compris,je pensais que la balise code évitait    l'interprétation des codes causant un problème pour publier le message (erreur de balises en essayant de valider le message)
c'est pourquoi j'ai inséré (à tort a fortiori) les commandes à l'intérieur de balises "code"
JM

Hors ligne

#48 Le 20/04/2026, à 14:04

Watael

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

~ $ mon_champ="+-*/^"
~ $ # comme ça:
~ $ recherche='\*'
~ $ echo "${mon_champ%%$recherche*}"
+-
~ $ # ou comme ça:
~ $ recherche='*'
~ $ echo "${mon_champ%%"$recherche"*}
+-
~ $

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#49 Le 20/04/2026, à 14:20

xubu1957

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Dans le mémento des balises code :

- les règles du forum > balises BB code :

Balise CODE :

C'est la balise à utiliser pour donner de longs messages d'erreurs, des contenus de fichiers de configuration, des commandes à taper, etc … Elle permet des messages plus "compacts", et est moins ambiguë que d'autres polices sur certains caractères.

le 30/11/2023, Ayral a écrit :

Modération : les balises code ont pour but de
- séparer le texte de commentaire ou de question des retours de commande.
- de condenser le retour de commande dans une fenêtre sur fond noir, ce qui permet de lire le retour avec la police système, supprimant les confusions de l et des i par exemple. De même les retours très longs sont dans une fenêtre à hauteur limitée, dans laquelle on peut se déplacer avec les ascenseurs verticaux et parfois horizontaux.
- de voir les retours au format système, avec les tableaux bien alignés, par exemple.

le 29/12/2025, krodelabestiole a écrit :

(c'est le même bouton, qu'il s'agisse de code, de retour de commande, de liste de fichiers et répertoires, etc. : ça permet de limiter les longues listes dans un cadre de dimension raisonnable, et de mettre en forme en police monospace, et globalement de savoir qu'il s'agit d'infos système techniques.)


Conseils pour les nouveaux demandeurs et pas qu'eux
Important : Pensez à passer vos sujets en [ Résolu ] lorsque ceux-ci le sont, au début du titre en cliquant sur Modifier sous le premier message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.                   Membre de Linux-Azur

Hors ligne

#50 Le 20/04/2026, à 16:25

MicP

Re : Je reviens Rechercher la position d'une chaine de caract dans un champ

Bonjour

JM3863 a écrit :

… avec A (présent)  ou  N(absent)  la valeur de $(( ${#BASH_REMATCH[1]}  )) est à zéro  …

Si recherche a bien été trouvé dans machaine, alors la ligne de commande que j'ai proposé retournera la valeur de la position de recherche dans machaine
(et si recherche a bien été trouvé dans machaine alors le code d'erreur retourné par l'exécution de la ligne de commande sera : zéro)

mic@deb1210:~$ machaine="ABCDEFGHIJKLM"
mic@deb1210:~$ recherche="A"
mic@deb1210:~$ [[ $machaine =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
1
mic@deb1210:~$ echo "Code d'erreur retourné : $?"
Code d'erreur retourné : 0
mic@deb1210:~$ 

=======
Mais si recherche n'a PAS été trouvé dans machaine alors la ligne de commande ne retournera rien du tout.
(et le code d'erreur retourné par l'exécution de la ligne de commande sera : 1)

mic@deb1210:~$ machaine="ABCDEFGHIJKLM"
mic@deb1210:~$ recherche="N"
mic@deb1210:~$ [[ $machaine =~ (.*)$recherche ]] && echo $(( ${#BASH_REMATCH[1]} + 1 ))
mic@deb1210:~$ 
mic@deb1210:~$ echo "Code d'erreur retourné : $?"
Code d'erreur retourné : 1
mic@deb1210:~$ 

Ci-dessus, recherche n'a PAS été trouvé dans machaine => l'exécution de la ligne de commande ne donne aucun retour, et le code d'erreur retourné est à 1

=======
En utilisant le code d'erreur retourné par la commande interne bash [[
on pourrait faire :

if [[ $machaine =~ (.*)$recherche ]]; then
    echo "'$recherche' a été trouvé au caractère N°$((${#BASH_REMATCH[1]}+1)) de '$machaine'."
  else
    echo "'$recherche' n'a PAS été trouvé dans '$machaine'."
fi

=======
Si je donne comme valeurs :

recherche="xyz"
machaine="  x  y z ABC xyz edc"

La ligne de commandes ci-dessous :

if [[ $machaine =~ (.*)$recherche ]]; then echo "'$recherche' a été trouvé au caractère N°$((${#BASH_REMATCH[1]}+1)) de '$machaine'."; else echo "'$recherche' n'a PAS été trouvé dans '$machaine'."; fi

donnera :

'xyz' a été trouvé au caractère N°14 de '  x  y z ABC xyz edc'.

=======
Mais si je donne comme valeurs :

recherche="bonjour"
machaine="  x  y z ABC xyz edc"

le retour de la même ligne de commandes donnera :

'bonjour' n'a PAS été trouvé dans '  x  y z ABC xyz edc'.

=======
NOTE : Code d'erreur <=> code de retour <=> exit code <=> status code <=> exit status

Dernière modification par MicP (Le 20/04/2026, à 17:37)

Hors ligne