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 🙂