Es gibt zwei Syntaxen für die Befehlsersetzung:mit Dollar-Klammern und mit Backticks.
Ausführen von top -p $(pidof init)
und top -p `pidof init`
gibt die gleiche Ausgabe. Sind diese beiden Vorgehensweisen dasselbe oder gibt es Unterschiede?
Akzeptierte Antwort:
Die Backquotes im alten Stil ` `
behandeln Sie umgekehrte Schrägstriche und Verschachtelungen etwas anders. Das neue $()
interpretiert alles zwischen ( )
als Befehl.
echo $(uname | $(echo cat))
Linux
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
funktioniert, wenn die verschachtelten Backquotes maskiert werden:
echo `uname | `echo cat``
Linux
Backslash-Spaß:
echo $(echo '\')
\
echo `echo '\'`
Das neue $()
gilt für alle POSIX-konformen Shells.
Wie mouviciel betonte, ` `
im alten Stil könnte für ältere Shells notwendig sein.
Abgesehen vom technischen Standpunkt ist das alte ` `
hat auch einen optischen Nachteil:
- Schwer zu bemerken:
I like $(program) better than `program`
- Leicht zu verwechseln mit einem einfachen Anführungszeichen:
'`'`''`''`'`''`'
- Nicht so einfach zu tippen (vielleicht nicht einmal auf dem Standardlayout der Tastatur)
(und SE verwendet ` `
für eigene Zwecke war es eine Qual, diese Antwort zu schreiben 🙂