Was ist der Unterschied zwischen ' und "?

Was ist der Unterschied zwischen ' und "?

Ich habe versucht, eine Textdatei in einem Bash-Skript zu erstellen.

Der echoBefehl erstreckt sich über mehrere Zeilen und enthält einige doppelte Anführungszeichen "".

#!/bin/bash 

echo "blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla" > /root/bin/bla

Der Befehl enthält viele Anführungszeichen "", echowas unerwünscht ist.

Und ich tat

#!/bin/bash 

echo 'blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla' > /root/bin/bla

Ich habe mich gefragt, ob es einen Unterschied zwischen Anführungszeichen " und einfachen Anführungszeichen ' gibt.

Welches hat die höhere Priorität? Liegt es nur an den optischen Unterschieden?

Antwort1

Von demBash-Handbuch:

3.1.2.2 Einfache Anführungszeichen

Wenn Sie Zeichen in einfache Anführungszeichen (''') einschließen, bleibt der Literalwert jedes Zeichens innerhalb der Anführungszeichen erhalten. Zwischen einfachen Anführungszeichen darf kein einfaches Anführungszeichen stehen, auch nicht, wenn ein Backslash davor steht.

3.1.2.3 Doppelte Anführungszeichen

Wenn Zeichen in doppelte Anführungszeichen ('"') eingeschlossen werden, bleibt der Literalwert aller Zeichen innerhalb der Anführungszeichen erhalten, mit Ausnahme von '$', '`', '\' und, wenn die Verlaufserweiterung aktiviert ist, '!'. Die Zeichen '$' und '`' behalten ihre spezielle Bedeutung innerhalb von doppelten Anführungszeichen (siehe Shell-Erweiterungen). Der Backslash behält seine spezielle Bedeutung nur, wenn ihm eines der folgenden Zeichen folgt: '$', '`', '"', '\' oder Zeilenumbruch. Innerhalb von doppelten Anführungszeichen werden Backslashs, denen eines dieser Zeichen folgt, entfernt. Backslashs vor Zeichen ohne spezielle Bedeutung bleiben unverändert. Ein doppeltes Anführungszeichen kann innerhalb von doppelten Anführungszeichen zitiert werden, indem ihm ein Backslash vorangestellt wird. Wenn aktiviert, wird die Verlaufserweiterung ausgeführt, sofern ein in doppelten Anführungszeichen erscheinendes '!' nicht mit einem Backslash maskiert wird. Der Backslash vor dem '!' wird nicht entfernt. Die speziellen Parameter '*' und '@' haben eine spezielle Bedeutung, wenn sie in doppelten Anführungszeichen stehen (siehe Shell-Parametererweiterung).

Hier sind einige praktische Demonstrationen des oben genannten:

  • Doppelte Anführungszeichen ermöglichen die Auswertung von Parametererweiterungen, einfache Anführungszeichen hingegen nicht:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
  • Doppelte Anführungszeichen ermöglichen die Auswertung von Backslash-Escapezeichen, einfache Anführungszeichen hingegen nicht:
$ echo "\\"
\
$ echo '\\'
\\
  • Doppelte Anführungszeichen ermöglichen die Auswertung von Befehlsersetzungen ( $(, `), einfache Anführungszeichen hingegen nicht:
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)

verwandte Informationen