Esistono due sintassi per la sostituzione dei comandi:con parentesi-dollaro e con backtick.
Esecuzione di top -p $(pidof init) e top -p `pidof init` dà lo stesso output. Questi due modi di fare sono la stessa cosa o ci sono differenze?
Risposta accettata:
Le virgolette vecchio stile ` ` trattare i backslash e la nidificazione in modo leggermente diverso. Il nuovo stile $() interpreta tutto ciò che si trova tra ( ) come comando.
echo $(uname | $(echo cat))
Linux
echo `uname | `echo cat``
bash: command substitution: line 2: syntax error: unexpected end of file
echo cat
funziona se le virgolette nidificate sono state salvate:
echo `uname | `echo cat``
Linux
divertimento con il backslash:
echo $(echo '\')
\
echo `echo '\'`
Il nuovo stile $() si applica a tutte le shell conformi a POSIX.
Come ha sottolineato mouviciel, il vecchio stile ` ` potrebbe essere necessario per le shell più vecchie.
A parte il punto di vista tecnico, il vecchio stile ` ` ha anche uno svantaggio visivo:
- Difficile da notare:
I like $(program) better than `program` - Facilmente confuso con una virgoletta singola:
'`'`''`''`'`''`' - Non così facile da digitare (forse nemmeno sul layout standard della tastiera)
(e SE usa ` ` per i propri scopi, è stato un dolore scrivere questa risposta 🙂