Unterschied bei der Verwendung von Backticks in Anführungszeichen und einfachen Anführungszeichen in Bash


12

Warum unterscheiden sich die folgenden beiden Ausführungen in der Ausgabe? (Ich benötige doppelte Anführungszeichen für Variablen in meinem eventuellen Befehl.)

$ sudo su -c "echo `cat /root/root_file`"
cat: /root/root_file: Permission denied
$ sudo su -c 'echo `cat /root/root_file`'
Yay, highly classified content!

Antworten:


19

Bash führt eine Reihe von Erweiterungen durch, bevor der Befehl ausgeführt wird ( sudoin diesem Fall). Im ersten Fall wird die Befehlssubstitution ausgeführt, weil sie in doppelten Anführungszeichen steht - sie wird wie Sie ausgeführt, daher der Fehler. Im zweiten Fall verhindern die einfachen Anführungszeichen Erweiterungen, sodass die Backticks erst ersetzt werden, wenn die Shell von root ausgeführt wird.

Siehe auch https://www.gnu.org/software/bash/manual/bashref.html#Quoting


6

Im ersten Beispiel werden die Backticks von Ihrer Shell ausgewertet (als Sie und nicht als root). Versuche es mit

sudo su -c "echo `whoami`"

In der zweiten mit den einfachen Anführungszeichen wird 'der gesamte String echo `cat /root/root_file`an die Root-Shell übergeben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.