Unterschiede zwischen Anführungszeichen (""), einfachen Anführungszeichen ("") und Backticks ("") in der Befehlszeile?

43

Ich sehe häufig Tutorials im Internet oder Posts auf dieser Site, in denen die folgenden Zeichen in der Befehlszeile verwendet werden. Oft scheint es, dass sie für ziemlich ähnliche Zwecke verwendet werden. Was sind die Unterschiede zwischen ihnen, wenn sie in der Befehlszeile oder für die Shell-Programmierung verwendet werden? Zu welchem ​​Zweck verwende ich welche von ihnen?

" " double quotes

' ' single quotes

` ` backticks
NES
quelle

Antworten:

43

Nehmen wir zum Beispiel an, dass die Variable fooenthält uname( foo=uname).

  • echo "$foo"Ausgänge uname, die Variablen im Text ersetzen.
    • Verwenden Sie für ein literales $Zeichen in "Anführungszeichen \$; "Verwenden Sie für ein Literal \".
  • echo '$foo'Ausgänge $foo, die genaue Zeichenfolge.
    • Auch 'kann nicht als \'in 'Anführungszeichen entkommen werden . Aber du kannst verwenden 'foo'\''bar'.
  • echo `$foo`ausgibt Linux, den Inhalt der Variablen ausführt und echodruckt.
Shellholic
quelle
\wird in einfachen Anführungszeichen immer wörtlich behandelt, auch wenn es vor a steht '. Nach einer Eröffnung 'wird die nächste 'immer als Schlusszitat interpretiert. So etwas wie das Zitieren 'in einer Zeichenfolge in einfachen Anführungszeichen kann erreicht werden, indem das Zitieren beendet, 'einzeln ausgeblendet und das Zitieren erneut gestartet wird. Das heißt, während \'es nicht zwischen dem Öffnen und Schließen von 'Zeichen '\''funktioniert , funktioniert es. (Siehe Gilles ' Korrektur für einen meiner Posts, als ich denselben Fehler
Eliah Kagan
11

Dies wird im entsprechenden Abschnitt des Bash-Handbuchs sehr gut erklärt . Kurz gesagt, alles in einfachen Anführungszeichen wird wörtlich interpretiert. Also zum Beispiel:

$ echo '$SHELL'
$SHELL
$ echo '{1..3}'
{1..3}

Vergleichen Sie das mit den nicht zitierten Versionen:

$ echo $SHELL
/bin/bash
$ echo {1..3}
1 2 3

Doppelte Anführungszeichen ermöglichen eine variable Erweiterung (auch die Erweiterung des Verlaufs und einige andere Dinge). Grundsätzlich verwenden Sie sie, wenn Sie mit etwas zu tun haben, das Sie erweitert sehen möchten. Zum Beispiel:

$ echo "$SHELL"
/bin/bash
$ echo "!!"
echo "echo "$SHELL""
echo /bin/bash

Mit anderen Worten, einfache Anführungszeichen schützen einen String vollständig vor der Shell, während doppelte Anführungszeichen einige Dinge (z. B. Leerzeichen) schützen, aber ermöglichen, dass Variablen und Sonderzeichen korrekt erweitert / interpretiert werden.

terdon
quelle
1
Sie sind sich nicht sicher, ob das OP nachträglich geändert wurde, aber in dieser Antwort werden keine Backticks erwähnt?
Alexander Mills
5

Einfache Anführungszeichen ( '') werden verwendet, um den Literalwert jedes in Anführungszeichen eingeschlossenen Zeichens beizubehalten.

Bei Verwendung von doppelten Anführungszeichen ( "") wird der $Literalwert aller eingeschlossenen Zeichen beibehalten, mit Ausnahme des Dollarzeichens ( ), der Backticks (einfache Anführungszeichen rückwärts ``) und des Backslash ( \).

Wenn ``die Shell in Back-Ticks ( ) eingeschlossen ist, bedeutet dies "die Ausgabe des Befehls in den Back-Ticks". Dies wird als "Befehlsersetzung" bezeichnet, da die Ausgabe des Befehls den Befehl selbst ersetzt.

Verweise:

aneeshep
quelle
3
echo '$HOME' is "$HOME"

Einfache Anführungszeichen verhindern die variable Erweiterung, während doppelte Anführungszeichen dies zulassen.

ubfan1
quelle
2

Ich spreche nur im Allgemeinen, aber:

""- Wird verwendet, um einige Informationen vor der Ausgabe zu verarbeiten. (Wie in PHP.)

  • Zum Beispiel: name=NESS; echo "Hello my name is $name"gibt aus:Hello my name is NESS

''- Wird verwendet, um die Ausgabe so anzuzeigen, wie sie ist. (Auch wie in PHP.)

  • Im obigen Beispiel wird ausgegeben Hello my name is $name

Der Unterschied zwischen doppelten und einfachen Anführungszeichen besteht also darin, dass doppelte Anführungszeichen die Variable verarbeiten und den Wert anzeigen, während einfache Anführungszeichen den Namen der Variablen ohne Verarbeitung anzeigen.

`` - Wird zum Zitieren von Befehlen verwendet, die später einer anderen Variablen zugewiesen werden.

Luis Alvarado
quelle
1

Einfache Anführungszeichen enthalten einen Wert, der wörtlich zu verstehen ist: Alle Arten von Erweiterungen werden unterdrückt. In der Regel verwendet , wenn der Wert enthält oder kann Leerraum (Leerzeichen, Tabulator, new-line) oder Sonderzeichen ( $, \, `) , dass der Benutzer nicht will , speziell von der Shell erweitert / behandelt werden.

Doppelte Anführungszeichen enthalten einen Wert, der Variablen enthält, und die Zeichen werden ersetzt. Erforderlich, wenn die Ausgabe Leerzeichen enthalten kann und als Einzelwert zugewiesen werden muss.

In Anführungszeichen steht ein Befehl, dessen Ergebnisse als Wert gesucht werden. Neuere Shells erlauben die Verwendung von $(...)anstelle von `...`. Ich bevorzuge die neuere Methode.

Der folgende Code hilft möglicherweise zu verstehen, was passiert.

CMD = 'ls.'
echo sq: $ CMD
setze $ CMD
Echo Raw 1: 1 $
Echo roh: $ *
setze "$ CMD"
echo dq: $ 1
echo bq: `$ CMD`
Echo neu: $ ($ CMD)
BillThor
quelle