38 lines
930 B
Markdown
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
|
|
``` |