Bonjour à tous, et d'avance toute mes excuses pour le dérangement.

Je suis actuellement sur un problème ou je m'arrache les cheveux, et n'en ayant plus beaucoup, j'appelle à l'aide.
en BASH, j'ai une variable de longueur variable dans laquelle je dois vérifier les caractères et la valider en fonction d'un PATTERN
entre autre, je dois accepter dans ce PATTERN le crochet fermant ]

J'ai donc une fonction que je vous simplifie comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
function test()
{
local _String=${1};
local _LengthMin=${2};
local _LengthMax=${3};
local _Return=false;
local _PATTERN="^([a-zA-Z0-9_&#@%!:/;,<>\.\{\}\|\+\(\)\$\*\?\[\]-] {${_LengthMin},${_LengthMax}})$";
[[ ${_String} =~ ${_PATTERN} ]] && _Return=true;
echo ${_Return};
}
 
function test2()
{
local _String=${1};
local _LengthMin=${2};
local _LengthMax=${3};
local _Return=false;
local _PATTERN="^([a-zA-Z0-9_&#@%!:/;,<>\.\{\}\|\+\(\)\$\*\?\[-] {${_LengthMin},${_LengthMax}})$";
[[ ${_String} =~ ${_PATTERN} ]] && _Return=true;
echo ${_Return};
}
 
# Appel de la fonction test()
titi=$(test "9854139qdb@[$;,DHF564" 12 50); # Retourne false à cause du \]
toto=$(test2 "9854139qdb@[$;,DHF564" 12 50); # Retourne Retourne true mais pas de \] dans le PATTERN
tutu=$(test "9854139qdb@[$;,DHF]564" 12 50); # Retourne false à cause du \]
tata=$(test2 "9854139qdb@[$;,DHF]564" 12 50); # Retourne false --> normal le PATTERN ne prend pas les ]
Si dans le PATTERN, je retire le \] Ca fonctionne parfaitement
par contre, s'il y a un crochet dans la chaine envoyée, ça ne fonctionne naturellement plus. Or le crochet fermant, fait parti des caractères acceptables ...

Mais dès que le \] est dans le masque du PATTERN, la fonction retourne false quoi qu'il se passe.
D'ou ma petite question, comment échapper ce */+)e!§+ ce "]" pour qu'il soit pris en compte dans le masque autorisé.

Vous remerciant par avance de votre aide.

Bonne journée à tous