kann Backslash-Newline in Bash-Anführungszeichen nicht verstehen

kann Backslash-Newline in Bash-Anführungszeichen nicht verstehen

entsprechendGNU-Dokument,

Der Backslash behält seine besondere Bedeutung nur, wenn ihm eines der folgenden Zeichen folgt: '$', '`', '"', '\' oder Newline. In doppelten Anführungszeichen werden Backslashs, denen eines dieser Zeichen folgt, entfernt.

Ich habe es versucht

p="a\$b";echo $p  # a$b
p="a\`b";echo $p  # a`b
p="a\"b";echo $p  # a"b
p="a\\b";echo $p  # a\b

alles ist ok. Aber Newline??

p="a\newlineb";echo $p  # a\newlineb

Was bedeutet „Newline“ im Dokument?

Antwort1

Newline ist der Name des Newline-Zeichens, also des Zeichens, das \nin C normalerweise so geschrieben wird:

$ p="a\
b"; echo "$p"
ab

Das Ergebnis ist, abdass nicht, \a<newline>bda dieDer POSIX-Standard besagt:

Ein nicht in Anführungszeichen gesetztes A <backslash>soll den Literalwert des folgenden Zeichens beibehalten, mit Ausnahme von a <newline>. Wenn auf das <newline>ein folgt, <backslash>soll die Shell dies als Zeilenfortsetzung interpretieren. Das <backslash>und <newline>muss entfernt werden, bevor die Eingabe in Token aufgeteilt wird. Da das Escapezeichen <newline>vollständig aus der Eingabe entfernt und nicht durch ein Leerzeichen ersetzt wird, kann es nicht als Tokentrennzeichen dienen.

Aber die SaiteIstin Anführungszeichen gesetzt... Nun, das ist ein Sonderfall:

Das Zeichen <backslash>behält seine besondere Bedeutung als Escape-Zeichen nur, wenn darauf eines der folgenden Zeichen folgt, die als besonders gelten: $, `, ", \, <newline>.

Die Zeichenfolge in doppelten Anführungszeichen bedeutet, dass der Backslash-Newline so interpretiert wird, als wäre ernichtüberhaupt in Anführungszeichen gesetzt, was bedeutet, dass es als Zeilenfortsetzung fungiert und sowohl der Backslash als auch die neue Zeile entfernt werden.

Beachten Sie, dass dies bei der Zuweisung zur pVariablen geschieht und nicht, wenn Sie echosie ausführen.

Siehe auchSicherheitsimplikationen, wenn vergessen wird, eine Variable in Bash/POSIX-Shells in Anführungszeichen zu setzenüber die Notwendigkeit, Ihre Variablen immer in Anführungszeichen zu setzen.

verwandte Informationen