Einfache Anführungszeichen in doppelten Anführungszeichen und das Bash-Referenzhandbuch

18

In Abschnitt 3.1.2.3 mit dem Titel Double Quotes heißt es im Bash-Handbuch:

Das Einschließen von Zeichen in doppelte Anführungszeichen ('"') behält den Literalwert aller Zeichen in den Anführungszeichen bei, mit Ausnahme von '$', '', '\' und, wenn die Verlaufserweiterung aktiviert ist, '!'.

Im Moment beschäftige ich mich mit dem einfachen Anführungszeichen ( ').

Die spezielle Bedeutung, die im vorhergehenden Abschnitt, Abschnitt 3.1.2.2 beschrieben wurde, ist:

Das Einschließen von Zeichen in einfache Anführungszeichen ( ') behält den Literalwert jedes Zeichens in den Anführungszeichen bei. Ein einfaches Anführungszeichen darf nicht zwischen einfachen Anführungszeichen stehen, auch wenn ein Backslash vorangestellt ist.

Kombiniert man die beiden Expositionen,

 echo "'$a'"

Wenn eine Variable anicht definiert ist (daher $a= Null-Zeichenfolge), sollte sie $aauf dem Bildschirm gedruckt werden '', da sie eine besondere Bedeutung hat und $vor der besonderen Interpretation schützen würde . Stattdessen wird gedruckt ''. Warum so?

Lavya
quelle

Antworten:

21

Das 'einfache Anführungszeichen in Ihrem echoBeispiel erhält den Literalwert (und verliert seine Bedeutung), da es in doppelte Anführungszeichen ( ") eingeschlossen ist. Die umschließenden Zeichen sind doppelte Anführungszeichen.

Was Sie tun können, ist, die einzelnen Anführungszeichen separat auszudrucken:

echo "'"'$a'"'"

oder dem entkommen $:

echo "'\$a'"
Anthon
quelle
Oh du hast vollkommen recht! Die Ausgabe stimmt mit Ihrer Antwort überein, aber ich bezweifle, dass in der Zeile "Zeichen in doppelte Anführungszeichen ('"') eingeschlossen werden, wird der Literalwert aller Zeichen in den Anführungszeichen mit Ausnahme von '$', ' ’, ‘\’, and, when history expansion is enabled, ‘!’." in the manual. But now reading it again I realized the second character is not single quote, ("'") but tilde ("") beibehalten .
Ich bin
2
Das zweite im Handbuch erwähnte Zeichen ist das Backtick, nicht die Tilde.
Kenny Evitt
6

Sie missverstehen die Dokumentation:

eine besondere Bedeutung in sich zu haben, würde $ von der besonderen Interpretation abschirmen

Mittel „seine besondere Bedeutung zu haben , “ dass es sich speziell nicht wörtlich interpretiert. Einfache Anführungszeichen verhindern $das Erweitern. Einfache Anführungszeichen innerhalb von doppelten Anführungszeichen sind jedoch wörtliche Zeichen, dh sie haben keine Auswirkung auf irgendetwas. Wenn Sie die Ausgabe möchten $a, müssen Sie echo '$a'.

Hauke ​​Laging
quelle
Du hast recht. Ich habe das Dokument nicht nur falsch verstanden, sondern auch falsch gelesen ("` "für" '"!). Sie haben Recht mit "einfache Anführungszeichen in doppelten Anführungszeichen sind wörtliche Zeichen". Vielen Dank!
Lavya