human
Test Bash : que fait "=~"
gpt
Le ```~``` fait en réalité partie de l'opérateur ```=~``` qui effectue une correspondance d'expression régulière de la chaîne à sa gauche avec l'expression régulière étendue à sa droite.
```[[ "chaîne" =~ motif ]]
```
Notez que la chaîne doit être entre guillemets et que l'expression régulière ne doit pas l'être.
Un opérateur similaire est utilisé dans le langage de programmation Perl.
Les expressions régulières comprises par ```bash``` sont les mêmes que celles comprises par ```grep``` de GNU avec l'option ```-E```, c'est-à-dire l'ensemble étendu d'expressions régulières.

Un peu hors sujet, mais bon à savoir :
Lorsque vous effectuez une correspondance avec une expression régulière contenant des groupes de capture, la partie de la chaîne capturée par chaque groupe est disponible dans le tableau ```BASH_REMATCH```. La première/zeroième entrée de ce tableau correspond à ```&``` dans le modèle de remplacement de la commande de substitution de ```sed``` (ou ```$&``` en Perl), qui est la partie de la chaîne qui correspond au motif, tandis que les entrées à l'index 1 et suivants correspondent à ```\1```, ```\2```, etc. dans un modèle de remplacement de ```sed``` (ou ```$1```, ```$2```, etc. en Perl), c'est-à-dire les parties correspondant à chaque parenthèse.

Exemple :
```chaîne=$( date +%T )
if [[ "$chaîne" =~ ^([0-9][0-9]):([0-9][0-9]):([0-9][0-9])$ ]]; then
  printf 'Obtenu %s, %s et %s\n' \
    "${BASH_REMATCH[1]}" "${BASH_REMATCH[2]}" "${BASH_REMATCH[3]}"
fi
```
Cela peut afficher
```Obtenu 09, 19 et 14
```
si l'heure actuelle est 09:19:14.
La partie ```REMATCH``` du nom du tableau ```BASH_REMATCH``` vient de "Regular Expression Match", c'est-à-dire "RE-Match".

Dans les shells non-```bash``` de type Bourne, on peut également utiliser ```expr``` pour une correspondance limitée d'expressions régulières (en utilisant uniquement des expressions régulières de base).
Un petit exemple :
```$ chaîne="hello 123 world"
$ expr "$chaîne" : ".*[^0-9]\([0-9][0-9]*\)"
123
```