Files
SavaneWiki/docs/Linux/2025-05-20-bash-life.md
jf 3e10720fc5
All checks were successful
continuous-integration/drone/push Build is passing
bash_rematch
2026-03-16 17:58:14 +01:00

38 lines
930 B
Markdown

---
title: "Bash life"
summary: "Bourne Again SHell"
author:
- JF
date: 20-05-2025
---
[Bash cheatsheet](https://devhints.io/bash)
[Bash strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)
```bash
set -euo pipefail
IFS=$'\n\t'
```
## BASH_REMATCH et les tests de regex `=~` avec l'opérateur conditionnel `[[`:
[BASH_REMATCH special variable](https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-BASH_005fREMATCH)
Lors d'un test de regex avec du type `if [[ ${variable} =~ ${pattern} ]]`, tous les résultats qui "matchent" le pattern sont stockés dans un variable spéciale `BASH_REMATCH`, qui est en fait un array. On peut donc itérer dessus.
Exemple :
```bash
var="un velo"
pattern='(u[a-z]+)\s*(v[a-z]+)'
if [[ $var =~ $pattern ]]; then
for m in "${!BASH_REMATCH[@]}"; do
echo "$m: ${BASH_REMATCH[$m]}"
done
fi
```
Résultat:
```txt
0: un velo
1: un
2: velo
```