Text zwischen Backticks wird ausgeführt und durch die Ausgabe des Befehls ersetzt (abzüglich der nachgestellten Zeilenumbrüche, und achten Sie darauf, dass das Shell-Verhalten variiert, wenn die Ausgabe NUL-Zeichen enthält). Dies wird als Befehlsersetzung bezeichnet, da sie durch die Ausgabe des Befehls ersetzt wird. Wenn Sie also 5 drucken möchten, können Sie keine Backticks verwenden, Sie können Anführungszeichen verwenden, wie ein echo "$b"
beliebiges Zitat , oder Sie können es einfach löschen und verwenden echo $b
.
Wie Sie sehen, $b
schlägt bash
die Ausführung des Befehls bei Verwendung von Backticks 5
mit der Fehlermeldung fehl, da der Befehl 5 enthält .
Um zu verstehen, wie Backticks funktionieren, versuchen Sie Folgendes:
$ A=`cat /etc/passwd | head -n1`
$ echo "$A"
cat /etc/passwd |head -n1
sollte die erste Zeile der /etc/passwd
Datei drucken . Da wir jedoch Backticks verwenden, wird dies nicht auf der Konsole gedruckt. Stattdessen wird es in A
Variable gespeichert . Das können Sie bestätigen $A
. Beachten Sie, dass eine effizientere Methode zum Drucken der ersten Zeile der Befehl ist, head -n1 /etc/passwd
aber ich möchte darauf hinweisen, dass der Ausdruck in Backticks nicht einfach sein muss.
Wenn also die erste Zeile von / etc / passwd ist root:x:0:0:root:/root:/bin/bash
, wird der erste Befehl dynamisch durch bash to ersetzt A="root:x:0:0:root:/root:/bin/bash"
.
Beachten Sie, dass diese Syntax der Bourne-Shell entspricht. Zitieren und Entkommen wird schnell zum Albtraum, besonders wenn Sie anfangen, sie zu nisten. Ksh stellte die $(...)
Alternative vor, die jetzt standardisiert ist ( POSIX ) und von allen Shells unterstützt wird (sogar die Bourne-Shell von Unix v9). Daher sollten Sie $(...)
heutzutage stattdessen verwenden, es sei denn, Sie müssen für sehr alte Bourne-Muscheln tragbar sein.
Beachten Sie auch, dass die Ausgabe von `...`
und $(...)
der Wortteilung und der Generierung von Dateinamen genau wie die Variablenerweiterung (in zsh nur Wortteilung) unterliegen und daher im Allgemeinen in Listenkontexten angegeben werden müssten.