Vous pouvez soit :
- Echappez chaque symbole spécial avec une barre oblique inverse (comme dans
\[abc\]_\[x\|y\]
) ou - Mettre entre guillemets l'intégralité de l'argument (comme dans
"[abc]_[x|y]"
).
MODIF : Comme certains l'ont souligné, les guillemets doubles n'empêchent pas l'expansion des variables ni la substitution de commandes. Par conséquent, si votre regex contient quelque chose qui peut être interprété par bash comme l'un d'entre eux, utilisez plutôt des guillemets simples.
Utilisez des guillemets simples. Les guillemets simples garantissent qu'aucun des caractères n'est interprété.
$ printf %s 'spaces are not interpreted away
neither are new lines
nor variable names $TESTING
nor square brackets [TESTING]
nor pipe characters or redirection symbols | > <
nor the semicolon ;
nor backslashes \a \b \c \\
the only thing that does not work is the single quote itself
'
Il existe deux solutions si vous avez besoin d'intégrer un seul guillemet :
$ printf '%s\n' '[ Don'"'"'t worry, be happy! ]'
[ Don't worry, be happy! ]
$ printf '%s\n' '[ Don'\''t worry, be happy! ]'
[ Don't worry, be happy! ]
Par man bash
Il existe trois mécanismes de guillemets :le caractère d'échappement , guillemets simples et guillemets doubles.
Une barre oblique inverse sans guillemets (\ ) est lecaractère d'échappement . Il préserve la valeur littérale du prochain caractère qui suit, à l'exception de
. Si un \ La paire apparaît, et la barre oblique inverse n'est pas elle-même entre guillemets, le \ est traité comme une continuation de ligne (c'est-à-dire qu'il est supprimé du flux d'entrée et effectivement ignoré). Entourer les caractères de guillemets simples préserve la valeur littérale de chaque caractère entre guillemets. Un guillemet simple ne peut pas apparaître entre des guillemets simples, même s'ils sont précédés d'une barre oblique inverse.
L'insertion de caractères entre guillemets doubles préserve la valeur littérale de tous les caractères entre guillemets, à l'exception de $ , ` , \ , et, lorsque l'extension de l'historique est activée, ! . Les caractères $ et ` conservent leur signification particulière entre guillemets doubles. La barre oblique inverse conserve sa signification particulière uniquement lorsqu'elle est suivie de l'un des caractères suivants :$ , ` , " ,\ , ou
. Un guillemet double peut être entre guillemets doubles en le faisant précéder d'une barre oblique inverse. Si elle est activée, l'expansion de l'historique sera effectuée à moins qu'un ! apparaissant entre guillemets doubles est échappé à l'aide d'une barre oblique inverse. La barre oblique inverse précédant le ! n'est pas supprimé. Les paramètres spéciaux * et @ ont une signification particulière lorsqu'ils sont entre guillemets (voir PARAMETRES ci-dessous).
Mots de la forme $' chaîne ' sont traités spécialement. Le mot se développe en chaîne , avec les caractères d'échappement avec barre oblique inversée remplacés comme spécifié par la norme ANSI C. Les séquences d'échappement antislash, si elles sont présentes, sont décodées comme suit :
\a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits) \UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits) \cx a control-x characterLe résultat développé est entre guillemets simples, comme si le signe dollar n'avait pas été présent.
Une chaîne entre guillemets précédée d'un signe dollar ($" chaîne " ) entraînera la traduction de la chaîne en fonction des paramètres régionaux actuels. Si les paramètres régionaux actuels sont C ou POSIX , le signe dollar est ignoré. Si la chaîne est traduite et remplacée, le remplacement est entre guillemets.