GNU/Linux >> LINUX-Kenntnisse >  >> Linux

bash:wie man Befehlszeilenargumente mit Sonderzeichen übergibt

Sie können entweder:

  1. Escape jedes einzelne Sonderzeichen mit einem Backslash (wie in \[abc\]_\[x\|y\] ) oder
  2. 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 . Wenn ein \ -Paar erscheint, und der Backslash selbst wird nicht in Anführungszeichen gesetzt, das \ wird als Zeilenfortsetzung behandelt (das heißt, es wird aus dem Eingabestrom entfernt und effektiv ignoriert).

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 . Ein doppeltes Anführungszeichen kann in doppelte Anführungszeichen gesetzt werden, indem ihm ein umgekehrter Schrägstrich vorangestellt wird. Wenn aktiviert, wird die Verlaufserweiterung durchgeführt, es sei denn, ein ! das Erscheinen in doppelten Anführungszeichen wird mit einem umgekehrten Schrägstrich maskiert. Der Backslash vor dem ! wird nicht entfernt.

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.


Linux
  1. So löschen Sie den BASH-Befehlszeilenverlauf in Linux

  2. Wie übergibt man ein Befehlszeilenargument an ein Shell-Skript?

  3. So rufen Sie die Java-Version mit einem einzeiligen Befehl unter Linux ab

  4. bash-Alias-Befehl mit einfachen und doppelten Anführungszeichen

  5. Befehlszeilenargumente für docker run

So kommentieren Sie in Bash

So zeigen Sie den Bash-Verlauf ohne Zeilennummern an

So sichern Sie eine einzelne MySQL-Datenbank über die Befehlszeile

Wie liest man Befehlszeilenargumente in Shell-Skripten?

Wie übergebe ich Argumente an ein Skript, das vom Quellbefehl aufgerufen wird?

Wie bearbeite ich vorherige Zeilen in einem mehrzeiligen Befehl in Bash?