Ich verstehe nicht, wie Bash das Entkommen von Apostroph-Zeichen in Strings in einfachen Anführungszeichen bewertet.
Hier ist ein Beispiel:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Ich habe versucht, nach Erklärungen zu suchen, konnte aber nichts bekommen. Was macht Bash hier?
echo \''Hello World'\'
Antworten:
In einfachen Anführungszeichen ist kein Ausweichen möglich. Es gibt keine Möglichkeit, ein einfaches Anführungszeichen in einfache Anführungszeichen einzufügen. Siehe Zitieren in Man Bash .
quelle
echo '\''
echo $'\'hello world\''
Liefert neben POSIX-unterstützten einfachen und doppelten
bash
Anführungszeichen einen zusätzlichen Anführungszeichentyp, um eine kleine Klasse von maskierten Zeichen (einschließlich eines einfachen Anführungszeichens) in einer Zeichenfolge in Anführungszeichen zuzulassen:Weitere Informationen finden Sie im Abschnitt QUOTING auf der
bash
Manpage am Ende des Abschnitts. (Suchen Sie nach "ANSI C".)quelle
Um zu erklären, was mit Ihren maskierten Apostrophen passiert, untersuchen wir Ihr zweites Beispiel (siehe auch einfache Anführungszeichen oder starke Anführungszeichen ):
Hier haben Sie das Zitat hängen gelassen, wie Sie angegeben haben. Jetzt schneide das Ende zu und ändere es in:
Die Unterzeichenfolge "Hello World" wurde hier nicht in Anführungszeichen gesetzt, hat sich jedoch so verhalten, als wäre sie in Anführungszeichen gesetzt. Verwenden Sie Ihr Beispiel erneut und schneiden Sie das Ende dieses Mal anders ab:
Die Unterzeichenfolge "Hello World" verhält sich wieder so, als wäre sie in Anführungszeichen gesetzt, wobei am Ende nur das hinzugefügte Apostroph (ohne Anführungszeichen) steht.
Wenn am Ende ein weiteres einfaches Anführungszeichen hinzugefügt wird (Ihr ursprüngliches Beispiel), bleibt die Zeichenfolge hängen und wartet auf ein genaues Anführungszeichen.
quelle
Einfaches Beispiel für das Entziehen von Anführungszeichen in der Shell:
Schließen Sie dazu eine bereits geöffnete (
'
), platzieren Sie eine mit Escape-Zeichen versehene ( ), um sie\'
zu drucken, und öffnen Sie dann eine andere ('
).Alternative:
Sie beenden das bereits geöffnete (
'
), platzieren das Zitat in einem anderen Zitat ("'"
) und öffnen dann ein anderes ('
).Was du getan hast (
'\'Hello World\''
), ist:'
.\'
, so dass die Zeichenfolge wird:'\'
.Hello World
ist keine Anführungszeichen.\'
) platziert, ohne es zu öffnen.'
) öffnet die Zeichenfolge, aber es gibt keine schließende Zeichenfolge, die erwartet wird.Das richtige Beispiel wäre also:
Verwandte Themen: Wie vermeide ich einfache Anführungszeichen innerhalb von Zeichenfolgen in einfachen Anführungszeichen?
quelle