Esistono due diversi significati di "deprecato".
essere deprecato: (principalmente di una funzionalità software) utilizzabile ma considerato obsoleto e meglio evitabile, in genere a causa della sua sostituzione.
—Nuovo dizionario americano di Oxford
Con questa definizione i backtick sono obsoleti.
Lo stato obsoleto può anche indicare che la funzione verrà rimossa in futuro.
- Wikipedia
Con questa definizione i backtick non sono deprecati.
Ancora supportato:
Citando la specifica del gruppo aperto sui linguaggi di comando Shell , in particolare la sezione "2.6.3 Sostituzione dei comandi", si può vedere che entrambe le forme di sostituzione dei comandi, backtick ( `..cmd..`
) o dollar parens ( $(..cmd..)
) sono ancora supportate nella misura in cui le specifiche vanno.
estratto
La sostituzione dei comandi consente di sostituire l'output di un comando al posto del nome del comando stesso. La sostituzione del comando deve avvenire quando il comando è racchiuso come segue:
$(command)
or (backquoted version):
`command`
La shell espande la sostituzione del comando eseguendo il comando in un ambiente subshell (consultare Shell Execution Environment) e sostituendo la sostituzione del comando (il testo del comando più il racchiuso $()
o il backquotes) con l'output standard del comando, rimuovendo le sequenze di uno o più <newline> caratteri alla fine della sostituzione. I caratteri <newline> incorporati prima della fine dell'output non devono essere rimossi; tuttavia, possono essere trattati come delimitatori di campo ed eliminati durante la divisione del campo, a seconda del valore di IFS e delle quotazioni in vigore. Se l'output contiene byte nulli, il comportamento non è specificato.
All'interno dello stile di sostituzione comando retroquotato, <barra rovesciata> conserva il suo significato letterale, tranne quando seguito da: "$", " \`
" o <barra rovesciata> . La ricerca del backquote corrispondente deve essere soddisfatta dal primo backquote non quotato senza escape; durante questa ricerca, se si incontra un backquote non di escape all'interno di un commento della shell, si verifica un documento qui, una sostituzione di comando incorporata del $(command)
modulo o una stringa tra virgolette, si verificano risultati indefiniti. Una stringa tra virgolette singole o doppie che inizia, ma non termina, all'interno della `...`
sequenza " " produce risultati indefiniti.
Con il $(command)
modulo, tutti i caratteri che seguono la parentesi aperta alla parentesi di chiusura corrispondente costituiscono il comando. È possibile utilizzare qualsiasi script shell valido per il comando, ad eccezione di uno script costituito esclusivamente da reindirizzamenti che produce risultati non specificati.
Quindi allora perché tutti dicono che i backtick sono stati deprecati?
Perché la maggior parte dei casi d'uso dovrebbe fare uso della forma di parentesi in dollari anziché di backtick. (Deprecato nel primo senso sopra.) Molti dei siti più affidabili (tra cui U&L) lo affermano spesso, in tutto, quindi è un buon consiglio. Questo consiglio non deve essere confuso con un piano inesistente per rimuovere il supporto per i backtick dalle shell.
NOTA: questo terzo estratto (sopra) continua a mostrare diverse situazioni in cui i backtick semplicemente non funzionano, ma il metodo parens in dollari più recente funziona, a partire dal seguente paragrafo:
Inoltre, la sintassi retroquotata presenta restrizioni storiche sul contenuto del comando incorporato. Mentre il nuovo modulo "$ ()" è in grado di elaborare qualsiasi tipo di script incorporato valido, il modulo backquoted non è in grado di gestire alcuni script validi che includono backquotes.
Se continui a leggere quella sezione, gli errori vengono evidenziati mostrando come fallirebbero usando i backtick, ma funzionano usando la più recente notazione con parentesi in dollari.
conclusioni
Quindi è preferibile utilizzare le parentesi in dollari anziché i backtick, ma in realtà non stai usando qualcosa che è stato tecnicamente "deprecato" come in "questo smetterà di funzionare interamente in un punto pianificato".
Dopo aver letto tutto ciò, dovresti avere il suggerimento di essere fortemente incoraggiato a usare le parentesi in dollari a meno che tu non richieda specificamente la compatibilità con una vera shell Bourne non POSIX originale.
cd
in una directory per un esempio del perché la$(...)
notazione è più facile da usare delle virgolette nidificate.