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

Warum wird bei der Verwendung von Anführungszeichen ein einzelner umgekehrter Schrägstrich angezeigt?

Ich dachte immer, dass bash umgekehrte Schrägstriche gleich behandelt, wenn sie ohne oder mit doppelten Anführungszeichen verwendet werden, aber ich habe mich geirrt:

[[email protected] ~]$ echo "foo \ "
foo \
[[email protected] ~]$ echo foo \ # Space after \
foo

Also dachte ich, Backslashes werden immer gedruckt, wenn doppelte Anführungszeichen verwendet werden, aber:

[[email protected] ~]$ echo "foo \" "
foo "
[[email protected] ~]$ echo "foo \\ "
foo \

Warum wird der Backslash in der ersten Codezeile angezeigt?

Akzeptierte Antwort:

Abschnitt 3.1.2.3 Doppelte Anführungszeichen des GNU Bash-Handbuchs sagt:

Der Backslash behält seine besondere Bedeutung nur, wenn ihm eines der
folgenden Zeichen folgt:‘$ ’, ‚` ’, ‘" ’, ‘\ ’, oder newline . In doppelten Anführungszeichen werden Backslashes, denen eines
dieser Zeichen folgt, entfernt. Backslashes vor Zeichen
ohne besondere Bedeutung bleiben unverändert. Ein doppeltes Anführungszeichen kann
innerhalb doppelter Anführungszeichen gesetzt werden, indem ihm ein umgekehrter Schrägstrich vorangestellt wird. Wenn
aktiviert ist, wird die Verlaufserweiterung durchgeführt, es sei denn, ein „! ’, das
in doppelten Anführungszeichen steht, wird mit einem Backslash maskiert. Der Backslash vor
dem ‘! “ wird nicht entfernt.

Also \ in doppelten Anführungszeichen wird sowohl von \ unterschiedlich behandelt in einfachen Anführungszeichen und \ externe Anführungszeichen. Es wird wörtlich behandelt, es sei denn, es kann bewirken, dass ein Zeichen wörtlich behandelt wird, das andernfalls in doppelten Anführungszeichen eine besondere Bedeutung haben könnte.

Beachten Sie, dass Sequenzen wie \' , \? , und \* werden wörtlich behandelt und der Backslash wird nicht entfernt, da ' , ? und * haben bereits keine besondere Bedeutung, wenn sie in doppelte Anführungszeichen eingeschlossen sind.


Linux
  1. Wann sind doppelte Anführungszeichen erforderlich?

  2. Warum verwenden alle Docker?

  3. Entfernen von einfachen und doppelten Anführungszeichen in einer Zeichenfolge nur mit Bash / Standard-Linux-Befehlen

  4. Wann soll eine Shell-Variable in Anführungszeichen gesetzt werden?

  5. Warum benötigt `python` bei Verwendung von os.execlp `python` als argv[0]

Warum jeder versuchen sollte, Linux zu verwenden

Warum sind bei Shotwell die X- und Y-Positionen umgekehrt, wenn Crop verwendet wird?

Warum erscheinen keine Git-Farben bei der Verwendung von Watch?

Befehl bei Verwendung von sudo nicht gefunden

Warum verzögert sich mein Ubuntu-Build beim Verschieben von Fenstern?

Es werden zwei MOTDs angezeigt, wenn ich mich mit SSH bei meinem Server anmelde