GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Unterschied zwischen einfachen und doppelten Anführungszeichen in Bash Shell

Sie werden häufig Anführungszeichen in der Linux-Befehlszeile verwenden. Umgang mit Leerzeichen im Dateinamen? Sie verwenden Anführungszeichen. Umgang mit Sonderzeichen? Sie verwenden wieder Anführungszeichen.

Die Anführungszeichen sind 'besondere Merkmale' in der Linux-Shell und können verwirrend werden, besonders wenn Sie mit Linux-Befehlen und Shell-Scripting noch nicht vertraut sind.

Ich werde die verschiedenen Arten von Anführungszeichen und ihre Verwendung in Shell-Skripten erklären.

Es gibt vier verschiedene Arten von Anführungszeichen:

  • Einfaches Anführungszeichen '
  • Doppeltes Anführungszeichen "
  • Backslash \
  • Anführungszeichen `

Außer dem Backlash treten die restlichen drei Zeichen paarweise auf.

Schauen wir sie uns im Detail an.

1. Einfaches Anführungszeichen

Das einfache Anführungszeichen in Shell ignoriert alle Arten von Sonderzeichen darin. Alles zwischen den einfachen Anführungszeichen wird als ein einzelnes Element betrachtet.

Nehmen wir es mit Beispiel. Hier ist eine Beispieltextdatei mit einigen Cricketspielern aus den 90ern.

[email protected]:~$ cat cricket 
Allan Donald, South Africa
Steve Waugh, Australia
Mark Waugh, Australia
Henry Olonga, Zimbabwe
Sachin Tendulkar, India

Jetzt verwenden Sie den Befehl grep, um nach Cricketspielern mit dem Familiennamen Waugh zu suchen. Dadurch erhalten Sie zwei Ergebnisse:

[email protected]:~$ grep Waugh cricket
Steve Waugh, Australia
Mark Waugh, Australia

Wenn Sie jedoch nur nach Steve Waugh suchen möchten und versuchen, es unverändert zu verwenden, wird ein Fehler angezeigt:

[email protected]:~$ grep Steve Waugh cricket
grep: Waugh: No such file or directory
cricket:Steve Waugh, Australia

Wieso den? Weil Leerzeichen zum Trennen von Befehl, Optionen und Argument verwendet werden. Im obigen Beispiel braucht es Steve als erstes Argument für grep, aber Waugh und cricket als die Dateien genommen, in denen die Suche durchgeführt werden soll. Da es keine Datei namens Waugh gibt , es wird dafür ein Fehler ausgegeben. Gleichzeitig wird auch das Ergebnis aus der Datei cricket angezeigt .

Hier kommt das Zitat zur Rettung. Wenn Sie die Argumente in Anführungszeichen setzen, wird dies als einzelne Entität interpretiert.

[email protected]:~$ grep 'Steve Waugh' cricket
Steve Waugh, Australia

Grundsätzlich ignoriert die Shell, wenn sie das erste einfache Anführungszeichen sieht, alle Sonderzeichen (Leerzeichen sind auch Sonderzeichen), bis sie ein weiteres einfaches Anführungszeichen (schließende Anführungszeichen) findet.

Alle Sonderzeichen ignorieren

Alle Sonderzeichen verlieren ihre Bedeutung, wenn sie in einfache Anführungszeichen gesetzt werden. Sehen wir es uns anhand von Beispielen an.

Lassen Sie uns eine Variable in der Shell deklarieren. Wenn Sie den Variablennamen mit $ wiedergeben, wird der Wert der Variablen angezeigt.

[email protected]:~$ var=my_variable
[email protected]:~$ echo $var
my_variable

Aber wenn Sie es in einfache Anführungszeichen setzen, verliert $ seine besondere Kraft.

[email protected]:~$ echo '$var'
$var

Jetzt nur das. Die Eingabetaste bleibt auch unter einfachen Anführungszeichen erhalten.

[email protected]:~$ echo 'how are
> you?'
how are
you?

2. Doppeltes Anführungszeichen

Doppelte Anführungszeichen funktionieren fast genauso wie einfache Anführungszeichen. Fast, weil sie auch dazu neigen, alle Sonderzeichen außer:

zu ignorieren
  • Dollarzeichen $
  • Anführungszeichen `
  • Backslashes \

Da das Dollarzeichen nicht ignoriert wird, können Sie davon ausgehen, dass der Variablenname durch seinen Wert ersetzt wird. Was bei den einfachen Anführungszeichen nicht der Fall ist.

[email protected]:~$ var=my_variable
[email protected]:~$ echo "$var"
my_variable
[email protected]:~$ echo '$var'
$var

Die doppelten Anführungszeichen können verwendet werden, um einfache Anführungszeichen vor der Shell zu verbergen.

[email protected]:~$ var=My 'own villa' is yellow
own villa: command not found
[email protected]:~$ var="My 'own villa' is yellow"
[email protected]:~$ echo $var
My 'own villa' is yellow

Ebenso können Sie einfache Anführungszeichen verwenden, um doppelte Anführungszeichen vor der Shell zu verbergen.

[email protected]:~$ var=he said, "Awesome!"
said,: command not found
[email protected]:~$ var='he said, "Awesome!"'
[email protected]:~$ echo $var
he said, "Awesome!"

3. Backslash

Backslash ist wie das Setzen von einfachen Anführungszeichen um ein einzelnes Zeichen. Der Backslash „entgeht“ dem Zeichen, dem er vorangestellt ist.

Das bedeutet, dass das Zeichen, dem der Backslash folgt, seine besondere Bedeutung (falls vorhanden) verliert.

[email protected]:~$ var=variable
[email protected]:~$ echo \var
var
[email protected]:~$ echo $var
variable
[email protected]:~$ echo \$var
$var

Weil v hat keine besondere Bedeutung, echo \var druckt einfach var. Andererseits, wenn es mit $var verwendet wird , entgeht der Backslash der besonderen Bedeutung von $ und wird daher als $var ausgegeben anstelle des Werts von var .

Zeile mit Backslash fortsetzen

Sie werden eine weitere praktische Verwendung des Backslash-Zeichens bemerken, indem Sie einen einzelnen Befehl über mehrere Zeilen fortsetzen.

Wenn ein Befehl zu lang ist oder wenn es sich um eine Kombination von Befehlen handelt, sehen Sie einige Websites, die einen umgekehrten Schrägstrich verwenden, um den einzelnen Befehl in mehr als einer Zeile anzuzeigen. Dadurch wird der Befehl/Code besser lesbar.

Nehmen Sie zum Beispiel diesen langen Befehl.

docker run --name server --network net -v html:/usr/share/nginx/html -v $PWD/custom-config.conf:/etc/nginx/nginx.conf -p 80:80 --restart on-failure -d nginx:latest

Derselbe Befehl kann dank Backslashes in mehrere Zeilen aufgeteilt werden.

docker run --name server --network net \
-v html:/usr/share/nginx/html \
-v $PWD/custom-config.conf:/etc/nginx/nginx.conf \
-p 80:80 --restart on-failure -d nginx:latest

Es ist derselbe Befehl, nur etwas einfacher zu verstehen.

Backslash in doppelten Anführungszeichen

Der umgekehrte Schrägstrich ist eines der drei Sonderzeichen, das zusammen mit dem Dollarzeichen und den umgekehrten Anführungszeichen seine besondere Bedeutung behält.

Auf diese Weise können Sie den Backslash verwenden, um die besondere Bedeutung von Dollarzeichen, doppelten Anführungszeichen und umgekehrten Anführungszeichen in doppelten Anführungszeichen zu umgehen.

Nehmen Sie das folgende Beispiel, in dem $5 wird als nicht deklarierte Variable betrachtet und hat daher keinen Wert. Aus diesem Grund wird es von der Ausgabe des echo-Befehls ignoriert.

[email protected]:~$ echo "Meal costs $5.25"
Meal costs .25

Um dieses $ zu verwenden, ohne als Wert einer Variablen interpretiert zu werden, müssen Sie es mit /.

maskieren
[email protected]:~$ echo "Meal costs \$5.25"
Meal costs $5.25

Hier wird der Backslash (\) für seine Superkraft interpretiert, die der besonderen Bedeutung des nachfolgenden Zeichens entgehen soll.

4. Rückwärtszitate

Das letzte in dieser Liste sind Rückwärtszitate und es hat eine besondere Bedeutung. Es wird zur Befehlsersetzung verwendet.

Die Shell verfügt über diese Befehlsersetzungsfunktion, bei der ein bestimmter Befehl durch die Ausgabe des Befehls ersetzt wird.

Im Beispiel unten wird `date` durch die Ausgabe des date-Befehls ersetzt, die das aktuelle Datum und die aktuelle Uhrzeit des Linux-Systems anzeigt.

[email protected]:~$ echo The current date and time is `date`
The current date and time is Monday 23 August 2021 04:55:18 PM IST

Beachten Sie, dass die Ersetzung nur dann erfolgt, wenn zwischen den Backquotes ein Befehl steht. Andernfalls wird es so angezeigt, wie es ist.

[email protected]:~$ echo 'The current date and time is `late`'
The current date and time is `late`

Auch hier interpretieren die doppelten Anführungszeichen die umgekehrten Anführungszeichen, aber die einfachen Anführungszeichen ignorieren ihre besondere Bedeutung.

Jahrelang wurden die umgekehrten Anführungszeichen für die Befehlsersetzung in Shell-Skripten verwendet. Aber heutzutage bevorzugen moderne UNIX- und Linux-Systeme den $(command) stattdessen konstruieren.

[email protected]:~$ echo The current date and time is $(date)
The current date and time is Monday 23 August 2021 05:55:47 PM IST

Bleiben Sie mit der Zeit und hören Sie jetzt auf, die Anführungszeichen zu verwenden.

Ich hoffe, Sie haben jetzt ein besseres Verständnis für Anführungszeichen in Linux und Shell-Scripting.

Bitte hinterlassen Sie Ihre Vorschläge und Fragen im Kommentarbereich.


Linux
  1. Unterschied zwischen Login-Shell und Nicht-Login-Shell?

  2. Der Unterschied zwischen einem eingebauten Befehl und einem, der es nicht ist?

  3. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  4. Unterschied zwischen exportierten und nicht in Bash enthaltenen Shell-Variablen?

  5. Unterschied zwischen ${} und $() in Bash

Unterschied zwischen der Definition von Bash-Variablen mit und ohne Export

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen einer Konsole, einem Terminal und einer Shell?

Unterschied zwischen '{}' und {} im Find-Befehl?

Unterschied zwischen Befehlen im Bash-Skript und Befehlen im Terminal

Was ist der Unterschied zwischen apt-get und aptitude?