Sie können entweder:
- Escape jedes einzelne Sonderzeichen mit einem Backslash (wie in
\[abc\]_\[x\|y\]
) oder - Setzen Sie das gesamte Argument in doppelte Anführungszeichen (wie in
"[abc]_[x|y]"
).
BEARBEITEN: Wie einige angemerkt haben, verhindern doppelte Anführungszeichen weder eine Variablenerweiterung noch eine Befehlsersetzung. Wenn Ihre Regex also etwas enthält, das von Bash als einer dieser interpretiert werden kann, verwenden Sie stattdessen einfache Anführungszeichen.
Verwenden Sie einfache Anführungszeichen. Einfache Anführungszeichen stellen sicher, dass keines der Zeichen interpretiert wird.
$ 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
'
Es gibt zwei Lösungen, wenn Sie ein einfaches Anführungszeichen einbetten müssen:
$ 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! ]
Gemäß man bash
Es gibt drei Zitiermechanismen:das Escape-Zeichen , einfache Anführungszeichen und doppelte Anführungszeichen.
Ein nicht in Anführungszeichen gesetzter umgekehrter Schrägstrich (\ ) ist das Escape-Zeichen . Es behält den Literalwert des nächsten Zeichens bei, mit Ausnahme von
Das Einschließen von Zeichen in einfache Anführungszeichen behält den Literalwert jedes Zeichens innerhalb der Anführungszeichen bei. Ein einzelnes Anführungszeichen darf nicht zwischen einzelnen Anführungszeichen stehen, selbst wenn ein umgekehrter Schrägstrich vorangestellt ist.
Das Einschließen von Zeichen in doppelte Anführungszeichen behält den Literalwert aller Zeichen innerhalb der Anführungszeichen bei, mit Ausnahme von $ , ` , \ , und wenn die Verlaufserweiterung aktiviert ist, ! . Die Zeichen $ und ` behalten ihre besondere Bedeutung in doppelten Anführungszeichen. Der umgekehrte Schrägstrich behält seine besondere Bedeutung nur, wenn ihm eines der folgenden Zeichen folgt:$ , ` , " ,\ , oder
Die speziellen Parameter * und @ haben in doppelten Anführungszeichen eine besondere Bedeutung (siehe PARAMETER unten).
Wörter der Form $' Zeichenfolge ' werden besonders behandelt. Das Wort wird zu String erweitert , wobei Backslash-Escape-Zeichen wie im ANSI-C-Standard angegeben ersetzt werden. Backslash-Escape-Sequenzen, sofern vorhanden, werden wie folgt dekodiert:
\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 character
Das erweiterte Ergebnis wird in einfache Anführungszeichen gesetzt, als ob das Dollarzeichen nicht vorhanden gewesen wäre.
Eine Zeichenfolge in doppelten Anführungszeichen, der ein Dollarzeichen vorangestellt ist ($" Zeichenfolge " ) bewirkt, dass die Zeichenfolge gemäß dem aktuellen Gebietsschema übersetzt wird. Wenn das aktuelle Gebietsschema C ist oder POSIX , das Dollarzeichen wird ignoriert. Wenn die Zeichenfolge übersetzt und ersetzt wird, wird die Ersetzung in doppelte Anführungszeichen gesetzt.